Lettcode_36_Valid Sudoku

본 고 는 학습 중의 총 결 입 니 다.전재 하 는 것 을 환영 하지만 출처 를 밝 혀 주 십시오.http://blog.csdn.net/pistolove/article/details/42528601
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character  '.' .
A partially filled sudoku which is valid.
Note: A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
생각:
(1)문 제 는 하나의 게임 이 효과 가 있 는 지 를 판단 하 는 것 이다.
(2)문제 의 의 미 는 우리 로 하여 금 전체 수 독(물론,정말 구 해 가 복잡 하 다 면)을 풀 게 하 는 것 이 아니 라 수 독 에 있 는 데이터 가 효과 가 있 는 지 판단 하 게 하 는 것 이다.
(3)본 고의 사고방식 은 폭력 적 으로 풀 리 는 것 이다.왜냐하면 다른 좋 은 방법 을 생각 하지 못 했 기 때문이다.수 독 에 대응 하 는 9*9 의 2 차원 배열 을 옮 겨 다 니 며''가 아 닌 숫자 에 대해 서 는 그 가 있 는 줄,열,그리고 3*3 의 블록 구역 을 판단 해 야 한다.중복 되 는 상황 이 있 으 면 수 독 은 무효 이 고 구체 적 으로 아래 코드 를 볼 수 있다.
(4)본문 이 당신 에 게 도움 이 되 기 를 바 랍 니 다.
알고리즘 코드 는 다음 과 같 습 니 다.
public boolean isValidSudoku(char[][] board) {
	for (int i = 0; i < board.length; i++) {
		for (int j = 0; j < board[i].length; j++) {
			char curr = board[i][j];
			if(curr=='.'){
				continue;
			}
			
			// 
			for (int k = j+1; k < board.length; k++) {
				if(curr==board[i][k]){
					return false;
				}
			}
			
			
			// 
			for (int k = i+1; k < board.length; k++) {
				if(curr==board[k][j]){
					return false;
				}
			}
			
			
			//3*3   
			if(i>=0&&i<3&&j>=0&&j<3){
				int count=0;
				for (int k1 = 0; k1 < 3; k1++) {
					for (int k2 = 0; k2 < 3; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			if(i>=0&&i<3&&j>=3&&j<6){
				int count=0;
				for (int k1 = 0; k1 < 3; k1++) {
					for (int k2 = 3; k2 < 6; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			if(i>=0&&i<3&&j>=6&&j<9){
				int count=0;
				for (int k1 = 0; k1 < 3; k1++) {
					for (int k2 = 6; k2 < 9; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			
			if(i>=3&&i<6&&j>=0&&j<3){
				int count=0;
				for (int k1 = 3; k1 < 6; k1++) {
					for (int k2 = 0; k2 < 3; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			if(i>=3&&i<6&&j>=3&&j<6){
				int count=0;
				for (int k1 = 3; k1 < 6; k1++) {
					for (int k2 = 3; k2 < 6; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			if(i>=3&&i<6&&j>=6&&j<9){
				int count=0;
				for (int k1 = 3; k1 < 6; k1++) {
					for (int k2 = 6; k2 < 9; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			
			if(i>=6&&i<9&&j>=0&&j<3){
				int count=0;
				for (int k1 = 6; k1 < 9; k1++) {
					for (int k2 = 0; k2 < 3; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			
			if(i>=6&&i<9&&j>=3&&j<6){
				int count=0;
				for (int k1 = 6; k1 < 9; k1++) {
					for (int k2 = 3; k2 < 6; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
			
			
			if(i>=6&&i<9&&j>=6&&j<9){
				int count=0;
				for (int k1 = 6; k1 < 9; k1++) {
					for (int k2 = 6; k2 < 9; k2++) {
						if(board[k1][k2]==curr){
							count++;
						}
						if(count>1) return false;
					}
				}
			}
		}
	}
	return true;
}

좋은 웹페이지 즐겨찾기