zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】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.

    Note:
    A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.


    题解:根据题目的意思,每行每列和每一个3*3的九宫格里面1~9这9个数不能有重复的,那么就按行,列,和九宫格一一检查即可,要注意下标的计算和'.'符号的处理。

    代码如下:

     1 public class Solution {
     2     public boolean isValidSudoku(char[][] board) {
     3         int length = board.length;
     4         if(length == 0)
     5             return true;
     6         
     7         for(int i = 0;i < length;i++){
     8             boolean[] row_numbers = new boolean[10];
     9             boolean[] column_numbers = new boolean[10];
    10             for(int j = 0;j < length;j++){
    11                 //check if rows are valid
    12                 if(board[i][j]!= '.' ){
    13                     if(row_numbers[board[i][j] - '0'])
    14                         return false;
    15                     row_numbers[board[i][j]-'0'] = true;
    16                 }
    17                 
    18                 //check if colums are valid
    19                 if(board[j][i]!= '.'){
    20                     if(column_numbers[board[j][i]-'0'])
    21                         return false;
    22                     column_numbers[board[j][i]-'0'] = true;
    23                 }
    24             }                
    25         }
    26         
    27         //check if every 3*3 grid is valid
    28         for(int i = 0;i < 3;i++){
    29             for(int j = 0;j < 3;j++){
    30                 boolean[] numbers = new boolean[10];
    31                 for(int row = 3*i;row < 3*i+3;row++){
    32                     for(int column = 3*j;column < 3*j+3;column++){
    33                         if(board[row][column] != '.'){
    34                             if(numbers[board[row][column]-'0'])
    35                                 return false;
    36                             numbers[board[row][column]-'0'] = true;
    37                         }
    38                     }
    39                 }
    40             }
    41         }
    42         
    43         return true;
    44     }
    45 }

    代码中行和列的检查在一次9*9的循环中解决了,可以省一点时间,最终耗时532ms。


  • 相关阅读:
    初识 Image,region,xld(1)
    Opencv 滤波<11>
    Opencv 掩模<10>
    事件
    Ubuntu16 安装Anaconda3+tensorflow cpu版
    Windows10:Opencv4.0+Opencv4.0.1_contrib编译
    Qt5连接Mysql环境配置
    Qt5显示中文字符
    如何为多个VLAN配置DHCP?
    二层网络架构,接入交换机和核心交换机
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3858132.html
Copyright © 2011-2022 走看看