1. 程式人生 > 其它 >LeetCode T36 Valid Sudoku

LeetCode T36 Valid Sudoku

技術標籤:LeetCode300-javaleetcode

文章目錄

題目地址

中文:https://leetcode-cn.com/problems/valid-sudoku/
英文:https://leetcode.com/problems/valid-sudoku/

題目描述

Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  • Each row must contain the digits 1-9 without repetition.
  • Each column must contain the digits 1-9 without repetition.
  • Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Note:

  • A Sudoku board (partially filled) could be valid but is not necessarily solvable.
  • Only the filled cells need to be validated according to the mentioned rules.

Example 1:
在這裡插入圖片描述

Input: board = 
[["5","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,["."
,"9","8",".",".",".",".","6","."] ,["8",".",".",".","6",".",".",".","3"] ,["4",".",".","8",".","3",".",".","1"] ,["7",".",".",".","2",".",".",".","6"] ,[".","6",".",".",".",".","2","8","."] ,[".",".",".","4","1","9",".",".","5"] ,[".",".",".",".","8",".",".","7","9"]] Output: true

Example 2:

Input: board = 
[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. 
Since there are two 8's in the top left 3x3 sub-box, it is invalid.

Constraints:

  • board.length == 9
  • board[i].length == 9
  • board[i][j] is a digit or ‘.’.

思路

9*9挨個格子判斷

題解

class Solution {
    public boolean isValidSudoku(char[][] board) {

        for(int i=0;i<9;++i)
            for(int j=0;j<9;++j)
                if(board[i][j]>='1'&&board[i][j]<='9')
                {
                    for(int m=0;m<9&&m!=i;++m)
                        if(board[i][j] == board[m][j]) return false;
                    for(int n=0;n<9&&n!=j;++n)
                        if(board[i][j] == board[i][n]) return false;
                    int k1 = (i/3)*3;
                    int k2 = (j/3)*3;
                    for(int p=k1;p<k1+3;p++)
                        for(int q=k2;q<k2+3;q++)
                            if(i!=p&&j!=q&&board[i][j] == board[p][q]) return false;
                }

        return true;
    }

}