【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 valid 12 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 valid 19 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 valid 28 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。
分类:
leetcode刷题总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了