leetcode第36题

简介: 一个 9 * 9 的数独的棋盘。判断已经写入数字的棋盘是不是合法。需要满足下边三点,• 每一行的数字不能重复• 每一列的数字不能重复• 9 个 3 * 3 的小棋盘中的数字也不能重复。只能是 1 - 9 中的数字,不需要考虑数独最后能不能填满

image.png

一个 9 * 9 的数独的棋盘。判断已经写入数字的棋盘是不是合法。需要满足下边三点,

  • 每一行的数字不能重复
  • 每一列的数字不能重复
  • 9 个 3 * 3 的小棋盘中的数字也不能重复。

只能是 1 - 9 中的数字,不需要考虑数独最后能不能填满。

解法一 暴力解法

需要满足三条,那就一条一条判断。

publicbooleanisValidSudoku(char[][] board) {
//判断每一行for (inti=0; i<9; i++) {
if (!isValidRows(board[i])) {
returnfalse;
        }
    }
//判断每一列for (inti=0; i<9; i++) {
if (!isValidCols(i, board)) {
returnfalse;
        }
    }
//判断每个小棋盘for (inti=0; i<9; i=i+3) {
for (intj=0; j<9; j=j+3) {
if (!isValidSmall(i, j, board)) {
returnfalse;
            }
        }
    }
returntrue;
}
publicbooleanisValidRows(char[] board) {
HashMap<Character, Integer>hashMap=newHashMap<>();
for (charc : board) {
if (c!='.') {
if (hashMap.getOrDefault(c, 0) !=0) {
returnfalse;
            } else {
hashMap.put(c, 1);
            }
        }
    }
returntrue;
}
publicbooleanisValidCols(intcol, char[][] board) {
HashMap<Character, Integer>hashMap=newHashMap<>();
for (inti=0; i<9; i++) {
charc=board[i][col];
if (c!='.') {
if (hashMap.getOrDefault(c, 0) !=0) {
returnfalse;
            } else {
hashMap.put(c, 1);
            }
        }
    }
returntrue;
}
publicbooleanisValidSmall(introw, intcol, char[][] board) {
HashMap<Character, Integer>hashMap=newHashMap<>();
for (inti=0; i<3; i++) {
for (intj=0; j<3; j++) {
charc=board[row+i][col+j];
if (c!='.') {
if (hashMap.getOrDefault(c, 0) !=0) {
returnfalse;
                } else {
hashMap.put(c, 1);
                }
            }
        }
    }
returntrue;
}

时间复杂度:整个棋盘访问了三次,如果棋盘大小是 n,那么就是 3n。也就是 O(n)。

空间复杂度:O(1)。

第一种解法的作者太太聪明了!自己规定格式这种思想,很棒。

相关文章
|
4月前
leetcode-1518:换酒问题
leetcode-1518:换酒问题
28 0
|
4月前
LeetCode
LeetCode
29 0
|
4月前
leetcode-1219:黄金矿工
leetcode-1219:黄金矿工
64 0
|
4月前
|
消息中间件 Kubernetes NoSQL
LeetCode 3、28、1351
LeetCode 3、28、1351
单链表反转 LeetCode 206
单链表反转 LeetCode 206
68 0
LeetCode 389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。
63 0
leetcode第44题
时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。 空间复杂度:O(TP)。 同样的,和第10题一样,可以优化空间复杂度。
leetcode第44题
leetcode第39题
对回溯法又有了更深的了解,一般的架构就是一个大的 for 循环,然后先 add,接着利用递归进行向前遍历,然后再 remove ,继续循环。而解法二的动态规划就是一定要找到递进的规则,开始的时候就想偏了,导致迟迟想不出来。
leetcode第39题
leetcode第54题
在 leetcode 的 solution 和 discuss 看了下,基本就是这个思路了,只是实现上有些不同,怎么用来标记是否走过,当前方向,怎么遍历,实现有些不同,但本质上是一样的。就是充分理解题意,然后模仿遍历的过程。
leetcode第54题
leetcode第48题
将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。 解法一 可以先转置,然后把每列对称交换交换一下
leetcode第48题