leetcode刷题_有效的数独

题目描述

在这里插入图片描述
在这里插入图片描述

Java解决方法

class Solution {
    
    
    public boolean isValidSudoku(char[][] board) {
    
    
        //用一个三维数组即可解决,第三维0~2,代表行/列/子空间
        //第一维0~8,代表第n行/列/子空间
        //第二维0~8,代表1~9对应的数字
        //其值代表行/列/子空间 的第n行/列/子空间 的1~9对应的数字 的出现的次数。次数初始化为0

        int[][][] str = new int[9][9][3];
        for(int i = 0;i < 9;i++)
        {
    
    
            for(int j = 0;j < 9;j++)
            {
    
    
                if(board[i][j] == '.')
                {
    
    
                    continue;
                }
                int num = board[i][j] - '1';
                //1~9对应数组中的下标减一
                for(int k = 0;k < 3;k++)
                {
    
    
                    if(k == 2)
                    {
    
    
                        if(str[j / 3 + (i / 3) * 3][num][k] != 0)
                        {
    
    
                            return false;
                        }
                        else
                        {
    
    
                            str[j / 3 + (i / 3) * 3][num][k] = 1;
                        }
                    }
                    else if(k == 0)
                    {
    
    
                        if(str[i][num][k] != 0)
                        {
    
    
                            return false;
                        }
                        else
                        {
    
    
                            str[i][num][k] = 1;
                        }
                    }
                    else
                    {
    
    
                        if(str[j][num][k] != 0)
                        {
    
    
                            return false;
                        }
                        else
                        {
    
    
                            str[j][num][k] = 1;
                        }
                    }
                }
            }
        }
        return true;
    }
}

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_42148307/article/details/120283429