首页 > 代码库 > 【leetcode刷题笔记】Valid Sudoku
【leetcode刷题笔记】Valid Sudoku
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.
题解:根据题目的意思,每行每列和每一个3*3的九宫格里面1~9这9个数不能有重复的,那么就按行,列,和九宫格一一检查即可,要注意下标的计算和‘.‘符号的处理。
代码如下:
1 public class Solution { 2 public boolean isValidSudoku(char[][] board) { 3 int length = board.length; 4 if(length == 0) 5 return true; 6 7 for(int i = 0;i < length;i++){ 8 boolean[] row_numbers = new boolean[10]; 9 boolean[] column_numbers = new boolean[10];10 for(int j = 0;j < length;j++){11 //check if rows are valid12 if(board[i][j]!= ‘.‘ ){13 if(row_numbers[board[i][j] - ‘0‘])14 return false;15 row_numbers[board[i][j]-‘0‘] = true;16 }17 18 //check if colums are valid19 if(board[j][i]!= ‘.‘){20 if(column_numbers[board[j][i]-‘0‘])21 return false;22 column_numbers[board[j][i]-‘0‘] = true;23 }24 } 25 }26 27 //check if every 3*3 grid is valid28 for(int i = 0;i < 3;i++){29 for(int j = 0;j < 3;j++){30 boolean[] numbers = new boolean[10];31 for(int row = 3*i;row < 3*i+3;row++){32 for(int column = 3*j;column < 3*j+3;column++){33 if(board[row][column] != ‘.‘){34 if(numbers[board[row][column]-‘0‘])35 return false;36 numbers[board[row][column]-‘0‘] = true;37 }38 }39 }40 }41 }42 43 return true;44 }45 }
代码中行和列的检查在一次9*9的循环中解决了,可以省一点时间,最终耗时532ms。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。