zoukankan      html  css  js  c++  java
  • Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

    The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

    A partially filled sudoku which is valid.

     1 public class Solution {
     2     public boolean isValidSudoku(char[][] board) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         if(board == null || board.length != 9 || board[0].length != 9) return false;
     5         int[] checkr = new int[9];
     6         int[] checkc = new int[9];
     7         for(int i = 0; i < 9; i ++){
     8             for(int j = 0; j < 9; j ++){
     9                 if(board[i][j] - '0' > 0 && board[i][j] - '0' < 10){
    10                     checkr[board[i][j] - '0' - 1] ++;
    11                 }
    12                 if(board[j][i] - '0' > 0 && board[j][i] - '0' < 10){
    13                     checkc[board[j][i] - '0' - 1] ++;
    14                 }
    15             }
    16             for(int ii = 0; ii < 9; ii ++){
    17                 if(checkr[ii] > 1 || checkc[ii] > 1){
    18                     return false;
    19                 }
    20             }
    21             checkr = new int[9];
    22             checkc = new int[9];
    23         }
    24         for(int i = 0; i < 9; i ++){
    25             for(int j = 0; j < 3; j ++){
    26                 if(board[i][j] != '.')
    27                     checkc[board[i][j] - '0' - 1] ++;
    28             }
    29             if((i + 1) % 3 == 0){
    30                 for(int ii = 0; ii < 9; ii ++){
    31                     if(checkr[ii] > 1 || checkc[ii] > 1){
    32                         return false;
    33                     }
    34                 }
    35                 checkc = new int[9];
    36                 }
    37             }
    38         
    39         checkc = new int[9];
    40         for(int i = 0; i < 9; i ++){
    41             for(int j = 3; j < 6; j ++){
    42                 if(board[i][j] != '.')
    43                     checkc[board[i][j] - '0' - 1] ++;
    44             }
    45             if((i + 1) % 3 == 0){
    46                 for(int ii = 0; ii < 9; ii ++){
    47                     if(checkr[ii] > 1 || checkc[ii] > 1){
    48                         return false;
    49                     }
    50                 }
    51                 checkc = new int[9];
    52                 }
    53             }
    54         
    55         checkc = new int[9];
    56         for(int i = 0; i < 9; i ++){
    57             for(int j = 6; j < 9; j ++){
    58                 if(board[i][j] != '.')
    59                     checkc[board[i][j] - '0' - 1] ++;
    60             }
    61             if((i + 1) % 3 == 0){
    62                 for(int ii = 0; ii < 9; ii ++){
    63                     if(checkr[ii] > 1 || checkc[ii] > 1){
    64                         return false;
    65                     }
    66                 }
    67                 checkc = new int[9];
    68                 }
    69             }
    70         
    71         return true;
    72     }
    73 }

     第二遍:

     1 public class Solution {
     2     public boolean isValidSudoku(char[][] board) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         if(board == null || board.length != 9 || board[0].length != 9) return false;
     5         boolean[] checkr = new boolean[9];
     6         boolean[] checkc = new boolean[9];
     7         for(int i = 0; i < 9; i ++){
     8             checkr = new boolean[9];
     9             checkc = new boolean[9];
    10             for(int j = 0; j < 9; j ++){
    11                 if ( board[i][j] != '.'){
    12                     if(checkr[board[i][j] - '1']) return false;
    13                     checkr[board[i][j] - '1'] = true;
    14                 }
    15                 if ( board[j][i] != '.'){
    16                     if(checkc[board[j][i] - '1']) return false;
    17                     checkc[board[j][i] - '1'] = true;
    18                 }
    19             }
    20         }
    21         for(int a = 0; a < 3; a ++){
    22             for(int b = 0; b < 3; b ++){
    23                 checkr = new boolean[9];
    24                 for(int i = a * 3; i < (a + 1) * 3; i ++){
    25                     for(int j = b * 3; j < (b + 1) *3; j ++){
    26                         if ( board[i][j]!='.' ){
    27                             if(checkr[board[i][j] - '1']) return false;
    28                             checkr[board[i][j] - '1'] = true;
    29                         }
    30                     }
    31                 }
    32             }
    33         }
    34         return true;
    35     }
    36 }

     第三遍:

     1 public class Solution {
     2     public boolean isValidSudoku(char[][] board) {
     3         if(board == null || board.length != 9 || board[0].length != 9) return false;
     4         boolean[] value = new boolean[9];
     5         for(int i = 0; i < 9; i ++){
     6             value = new boolean[9];
     7             for(int j = 0; j < 9; j ++){
     8                 if(board[i][j] != '.' && value[board[i][j] - '1']) return false;
     9                 else if(board[i][j] != '.' && !value[board[i][j] - '1']) value[board[i][j] - '1'] = true;
    10             }
    11             value = new boolean[9];
    12             for(int j = 0; j < 9; j ++){
    13                 if(board[j][i] != '.' && value[board[j][i] - '1']) return false;
    14                 else if(board[j][i] != '.' && !value[board[j][i] - '1']) value[board[j][i] - '1'] = true;
    15             }
    16         }
    17         for(int k = 0; k < 3; k ++){
    18             for(int h = 0; h < 3; h ++){
    19                 value = new boolean[9];
    20                 for(int i = 3*k; i < 3*k + 3; i ++){
    21                     for(int j = 3*h; j < 3*h + 3; j ++){
    22                         if(board[i][j] != '.' && value[board[i][j] - '1']) return false;
    23                         else if(board[i][j] != '.' && !value[board[i][j] - '1']) value[board[i][j] - '1'] = true;
    24                     }
    25                 }
    26             }
    27         }
    28         return true;
    29     }
    30 }
  • 相关阅读:
    CAS无锁模式
    Redis 字符串结构和常用命令
    Redis 链表结构 和 常用命令
    Redis hash结构 和常用命令
    Spring + Redis ( 简单使用)
    使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项
    Java 208道面试题及部分答案
    面试相关知识点
    使用IDEA 搭建一个SpringBoot + Hibernate + Gradle
    Java相关知识点
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3366309.html
Copyright © 2011-2022 走看看