• 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.
    *
    * 根据以下规则确定数独是否有效:
    * 数独板可以部分填充,其中空单元格填充字符 “ . ”。就是 空的单元格用 . 来代替。
    * 一个部分填充的数独是有效的。
    */

    解析:
    * 这道题目的意思是 这个数独是否有效,返回 true, false.
    * 有三种情况不成立,将返回false:
    * 第一种: 循环每一行, 如果出现了相同的数字就不成立, 遇到 . 直接跳过
    * 第二种: 循环每一列, 如果出现了相同的数字就不成立, 遇到 . 直接跳过
    * 第三种: 循环每一个小的九宫格, 如果出现了相同的数字就不成立, 遇到 . 直接跳过(这个需要注意一下循环的方法,规律)

    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * 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.
     *
     * 根据以下规则确定数独是否有效:
     * 数独板可以部分填充,其中空单元格填充字符 “ . ”。就是 空的单元格用 . 来代替。
     * 一个部分填充的数独是有效的。
     *
     * 解析:
     * 这道题目的意思是 这个数独是否有效,返回 true, false.
     * 有三种情况不成立,将返回false:
     *      第一种: 循环每一行, 如果出现了相同的数字就不成立, 遇到 . 直接跳过
     *      第二种: 循环每一列, 如果出现了相同的数字就不成立, 遇到 . 直接跳过
     *      第三种: 循环每一个小的九宫格, 如果出现了相同的数字就不成立, 遇到 . 直接跳过(这个需要注意一下循环的方法,规律)
     */
    
    public class Main40 {
        public static void main(String[] args) {
            char[][] board = {
                    {'.','.','4','.','.','.','6','3','.'},
                    {'.','.','.','.','.','.','.','.','.'},
                    {'5','.','.','.','.','.','.','9','.'},
                    {'.','.','.','5','6','.','.','.','.'},
                    {'4','.','3','.','.','.','.','.','.'},
                    {'.','.','.','7','.','.','.','.','.'},
                    {'.','.','.','1','.','.','.','.','.'},
                    {'.','.','.','.','.','.','.','.','.'},
                    {'.','.','.','.','.','.','.','.','.'}
            };
            System.out.println(Main40.isValidSudoku(board));
        }
    
        public static boolean isValidSudoku(char[][] board) {
            Set<Character> set = new HashSet<>();
            // 第一种情况:
            for (int i=0;i<board.length;i++) {
                for (int j=0;j<board[i].length;j++) {
                    if (board[i][j] == '.') {
                        continue;
                    }
                    if (!set.contains(board[i][j])) {
                        set.add(board[i][j]);
                    }else{
                        return false;
                    }
                }
                set.clear();
            }
            // 第二种情况:
            for (int j=0;j<board[0].length;j++) {
                for (int i=0;i<board.length;i++) {
                    if (board[i][j] == '.') {
                        continue;
                    }
                    if (!set.contains(board[i][j])) {
                        set.add(board[i][j]);
                    }else{
                        return false;
                    }
                }
                set.clear();
            }
            // 第三种情况:
            for (int k=0;k<board.length;k++) {
                for (int i=k/3*3;i<k/3*3+3;i++) {
                    for (int j=k%3*3;j<k%3*3+3;j++) {
                        if (board[i][j] == '.') {
                            continue;
                        }
                        if (!set.contains(board[i][j])) {
                            set.add(board[i][j]);
                        }else{
                            return false;
                        }
                    }
                }
                set.clear();
            }
            return true;
        }
    }
    

      

  • 相关阅读:
    HTTP响应状态码记录
    Linux给指定用户或全部用户(已登录)发送消息
    JS面向对象的程序设计
    Linux下查看/管理当前登录用户及用户操作历史记录
    JS Math对象中一些小技巧
    Linux常用命令学习
    Python学习问题记录
    Python中dir()与help()的使用
    webdriver常用API
    数据库备份表
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11320292.html
Copyright © 2020-2023  润新知