Valid Sudoku
Posted ordi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Valid Sudoku相关的知识,希望对你有一定的参考价值。
1. Title
36. Valid Sudoku
2. Http address
https://leetcode.com/problems/valid-sudoku/?tab=Description
3. The question
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 ‘.‘.
4 My code(AC)
public class Solution { public boolean isValidSudoku(char[][] board) { if (board == null || board.length < 1) { return true; } int row = board.length; int col = board[0].length; Set<Character> set = null; for (int i = 0; i < row; i++) { set = new HashSet<Character>(); for (int j = 0; j < col; j++) { char tmp = board[i][j]; if ( tmp != ‘.‘ && set.contains(tmp)) { return false; } else { set.add(tmp); } } } for (int i = 0; i < col; i++) { set = new HashSet<Character>(); for (int j = 0; j < row; j++) { char tmp = board[j][i]; if (tmp != ‘.‘ && set.contains(tmp)) { return false; } set.add(tmp); } } int rowMin = 0; int rowMax = 2; int colMin = 0; int colMax = 2; while (rowMax < row && colMax < col) { if (!check(board, colMin, colMax, rowMin, rowMax)) { return false; } int[] tmp = { rowMin, rowMax, colMin, colMax }; while (colMax < col - 1) { colMin += 3; colMax += 3; if (!check(board, colMin, colMax, rowMin, rowMax)) { return false; } } colMin = tmp[2]; colMax = tmp[3]; while (rowMax < row - 1) { rowMin += 3; rowMax += 3; if (!check(board, colMin, colMax, rowMin, rowMax)) { return false; } } rowMin = tmp[0] + 3; rowMax = tmp[1] + 3; colMin = tmp[2] + 3; colMax = tmp[3] + 3; } return true; } public boolean check(char board[][], int colMin, int colMax, int rowMin, int rowMax) { Set<Character> set = new HashSet<Character>(); for (int i = rowMin; i <= rowMax; i++) { for (int j = colMin; j <= colMax; j++) { char tmp = board[i][j]; if (tmp != ‘.‘ && set.contains(tmp)) { return false; } else { set.add(tmp); } } } return true; } }
以上是关于Valid Sudoku的主要内容,如果未能解决你的问题,请参考以下文章