• 36. Valid Sudoku


    一、题目

      1、审题

      2、分析

        一个 9 * 9 的棋盘,其中 ‘ . ’ 代表未填写,判断其中填写的数字是否符合如下特点:

          a、每行的数字不重复

          b、每列的数字不重复

          c、每个3*3 的小棋盘中数字不重复

    二、解答

      1、思路:

        用双层循环,其中外循环 i 代表 X 轴坐标, j 代表 Y轴坐标。 则 [i, j] 为每一行的坐标, [j, i] 为每一列的坐标。同时, [i /3 * 3 + j / 3 , i % 3 * 3 + j % 3] 正好为第 i 个3* 3单元格的第 j 个格点坐标。最终利用 Set 判断数字是否重复。

      

    public class Solution {
        public boolean isValidSudoku(char[][] board) {
            
            // 因此第i个九宫格的第j个格点的行号可表示为i/3*3+j/3
    //        i / 3 * 3 + j / 3
            
            for (int i = 0; i < 9; i++) {
                // 表示第 i 个九宫格
                HashSet<Character> row = new HashSet<Character>();  
                HashSet<Character> column = new HashSet<Character>();  
                HashSet<Character> cube = new HashSet<Character>();  
                
                // 检查第 i 行
                for (int j = 0; j < 9; j++) {
                    
                    // 横坐标
                    if(board[i][j] != '.' && !row.add(board[i][j])) 
                        return false;
                    // 纵坐标
                    if(board[j][i] != '.' && !column.add(board[j][i])) 
                        return false;
                    
                    // 九宫格 坐标
                    int rowNum = i / 3 * 3 + j / 3;
                    int columnNum = i % 3 * 3 + j % 3;
                    if(board[rowNum][columnNum] != '.' && !cube.add(board[rowNum][columnNum])) 
                        return false;
                }
            }
            
            return true;
        
        }
    }

          

  • 相关阅读:
    关于字符函数的一些应用总结
    常用数字函数简单举例
    dump浅析B树索引
    pl/sql developer 登陆sys用户
    关于oracle11g简单的网络配置
    关于oracle数据库读取数据的三种方式
    创建表
    SQL*Plus 与数据库的交互
    Oracle编程艺术--配置环境
    MongoDB--(NoSQL)入门介绍
  • 原文地址:https://www.cnblogs.com/skillking/p/9446878.html
Copyright © 2020-2023  润新知