初级算法篇
有效的数独
判断一个 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 { |