leetcode第37题

简介: 从上到下,从左到右遍历每个空位置。在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后一个位置。期间如果出现没有数字可以填的话,就回退到上一个位置,换一下数字,再向后进行下去。

image.png给定一个数独棋盘,输出它的一个解。

解法一 回溯法

从上到下,从左到右遍历每个空位置。在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后一个位置。期间如果出现没有数字可以填的话,就回退到上一个位置,换一下数字,再向后进行下去。

publicvoidsolveSudoku(char[][] board) {
solver(board);
}
privatebooleansolver(char[][] board) {
for (inti=0; i<9; i++) {
for (intj=0; j<9; j++) {
if (board[i][j] =='.') {
charcount='1';
while (count<='9') {
if (isValid(i, j, board, count)) {
board[i][j] =count;
if (solver(board)) {
returntrue;
                        } else {
//下一个位置没有数字,就还原,然后当前位置尝试新的数board[i][j] ='.';
                        }
                    }
count++;
                }
returnfalse;
            }
        }
    }
returntrue;
}
privatebooleanisValid(introw, intcol, char[][] board, charc) {
for (inti=0; i<9; i++) {
if (board[row][i] ==c) {
returnfalse;
        }
    }
for (inti=0; i<9; i++) {
if (board[i][col] ==c) {
returnfalse;
        }
    }
intstart_row=row/3*3;
intstart_col=col/3*3;
for (inti=0; i<3; i++) {
for (intj=0; j<3; j++) {
if (board[start_row+i][start_col+j] ==c) {
returnfalse;
            }
        }
    }
returntrue;
}


时间复杂度:

空间复杂度:O(1)。

回溯法一个很典型的应用了。

相关文章
|
5月前
LeetCode
LeetCode
37 0
|
5月前
|
消息中间件 Kubernetes NoSQL
LeetCode 3、28、1351
LeetCode 3、28、1351
|
存储
leetcode:53.最大字序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
49 0
|
存储 Python
LeetCode 66. Plus One
给定表示非负整数的非空数字数组,加上整数的1。 存储数字使得最高有效数字位于列表的开头,并且数组中的每个元素包含单个数字。 您可以假设整数不包含任何前导零,除了数字0本身。
88 0
LeetCode 66. Plus One
LeetCode 354. Russian Doll Envelopes
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
79 0
LeetCode 354. Russian Doll Envelopes
|
算法 Python
LeetCode 386. Lexicographical Numbers
给定一个整数 n, 返回从 1 到 n 的字典顺序。
78 0
LeetCode 386. Lexicographical Numbers
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
105 0
leetcode第48题
将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。 解法一 可以先转置,然后把每列对称交换交换一下
leetcode第48题
leetcode第38题
难在了题目是什么意思呢? 初始值第一行是 1。 第二行读第一行,1 个 1,去掉个字,所以第二行就是 11。 第三行读第二行,2 个 1,去掉个字,所以第三行就是 21。 第四行读第三行,1 个 2,1 个 1,去掉所有个字,所以第四行就是 1211。 第五行读第四行,1 个 1,1 个 2,2 个 1,去掉所有个字,所以第五航就是 111221。 第六行读第五行,3 个 1,2 个 2,1 个 1,去掉所以个字,所以第六行就是 312
leetcode第38题
leetcode第44题
时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。 空间复杂度:O(TP)。 同样的,和第10题一样,可以优化空间复杂度。
leetcode第44题