0
点赞
收藏
分享

微信扫一扫

有效的数独

Gaaidou 2021-09-21 阅读 73
今日算法
题目描述:
注意:
示例 1:

示例 2:
思路

按照规则分别遍历行列以及3x3小网格行列,依次判断(太慢了,时间复杂度只超过5%)

代码实现:
class Solution {
    public boolean isValidSudoku(char[][] board) {
        int[] nums = new int[10];
        for (int i = 0; i < 9; i++) {
            Arrays.fill(nums, 0);
            for (int j = 0; j < 9; j++) {
                char ch = board[i][j];
                if (ch != '.') {
                    int num = Integer.valueOf(ch + "");
                    nums[num]++;
                    if (nums[num] > 1) return false;
                }
            }
        }
        
        for (int i = 0; i < 9; i++) {
            Arrays.fill(nums, 0);
            for (int j = 0; j < 9; j++) {
                char ch = board[j][i];
                if (ch != '.') {
                    int num = Integer.valueOf(ch + "");
                    nums[num]++;
                    if (nums[num] > 1) return false;
                }
            }
        }
        for (int i = 0; i < 9; i+= 3) {
            for (int j = 0; j < 9; j+= 3) {
               Arrays.fill(nums, 0);
               if (!isValid(nums, board, i, j)) return false;
            }
        }
        return true;
    }
    public boolean isValid(int[] nums, char[][] board, int i1, int j) {
        int i2 = i1 + 3;
        int j2 = j + 3;
        for (; i1 < i2; i1++) {
            int j1 = j;
            for (; j1 < j2; j1++) {
                char ch = board[i1][j1];
                if (ch != '.') {
                    int num = Integer.valueOf(ch + "");
                    nums[num]++;
                    if (nums[num] > 1) return false;
                }
            }
        }
        return true;
    }
}
举报

相关推荐

0 条评论