初级算法篇
有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。
这道题主要的问题就是坐标变换,考虑如何在相同的循环次数条件下的同时以三种方式进行遍历。
首先建立三个数组row
(验证行) col
(验证列) cube
(验证宫)。
他们都是int
类型且大小为10且初始值为0的数组。当遍历到的元素不是'.'
时,判断数组相应位置是否为1,若为1表示数独无效,返回false,若不为1,将相应位置的值设为一。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
本题的难点在于坐标变换,在相同的i,j
值得情况下,实现三种遍历的方式。
1 | //对于行的验证可以写为 |
验证列时,由于i
不变,j
变,只要将board[i][j]
换成board[j][i]
即可对列进行验证。
比较难的一点是如何遍历宫的元素。即将i
和j
转换为每个宫的坐标。
有转换关系:
cubeX = 3 * (i / 3) + j / 3
cubeY = 3 *(i % 3) + j % 3
可以得到全部代码:
1 | class Solution { |