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)。

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

相关文章
|
6月前
刷题之Leetcode206题(超级详细)
刷题之Leetcode206题(超级详细)
52 0
刷题之Leetcode206题(超级详细)
|
6月前
刷题之Leetcode283题(超级详细)
刷题之Leetcode283题(超级详细)
25 0
|
6月前
|
索引
刷题之Leetcode35题(超级详细)
刷题之Leetcode35题(超级详细)
32 0
|
6月前
|
Java
刷题之Leetcode24题(超级详细)
刷题之Leetcode24题(超级详细)
28 0
|
6月前
刷题之Leetcode54题(超级详细)
刷题之Leetcode54题(超级详细)
30 0
|
6月前
leetcode19刷题打卡
leetcode19刷题打卡
34 0
|
6月前
leetcode344刷题打卡
leetcode344刷题打卡
27 0
|
存储 测试技术
leetcode刷题(1)
各位朋友们,大家好,从今天开始我将陆续为大家更新我自己每天的leedcode刷题,我将会为大家说明每一步的来由,保证你一天新学会几道题目。各位朋友可以跟着博主每天刷几道题,相信两个月后大家的代码能力可以得到明显的提高。那么接下来就开始今天的刷题之路了哦。
|
Java 测试技术 C语言
leetcode刷题(3)
各位朋友们大家好,今天是我leedcode刷题系列的第三篇,废话不多说,直接进入主题。