题目分析:
首先这道题不用考虑数独的必须有解,只需要满足题目的三个要求即可:
- 行不能有重复
- 列不能有重复
- 3*3的方格内不能有重复的
题目思路:
做这题的时候,我们免不了要去进行n²的遍历去解决,意思就是遍历到不合格的那一个立即return false,不然就一直遍历到最后一个,关键是我们要怎么去遍历。
我们需要考虑到以下几点:
- 二维数组中,需要被排除的东西(里面的‘.’)
- 如何用非强制遍历的方法判断某行有重复的
- 如何用非强制遍历的方法判断某列有重复的
- 如果判断3*3的块内有重复的
通过这提出的4个问题,我们进行逐一解决:
第一个问题最简单,加一层if就可以了
第二个问题和第三个问题我们可以一起解决,我们可以判断有value的单位,值是true,每一个有值的位置,我们都用一个boolean二维数组进行“收集”,把行收集在一起,列收集在一起,只要同一行或者同一列,令boolean二维数组的下标都相同,就说明,肯定有行重复或者列重复了,然后直接return false就行了。
第四个问题,就是在上面的情况下,多来一层if判断,我们需要创建一个二维boolean数组去判断,某个block,是否有重复的情况,那么,第一步,我们需要先判断board[i][j]现在到了第几个block,然后再用相同的思路去判断true or false就可以了。
代码实现: