leetcode做题记录0036

leetcode 0036

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述
在这里插入图片描述

思路

分成三部分:判断行是否有效、判断列是否有效、判断3x3的方格是否有效。

遍历整个二维数组,遇到’.'直接跳过,遇到数字进行上面三个判断,有一个条件无效直接返回false。

若所有数组均满足则返回true。

class Solution {
    public boolean isValidRow(char[][] board, int row, int col) {
		for (int i = 0; i < 9; i++) {
			if (i == col) {
				continue;
			} else {
				if (board[row][i] == board[row][col]) {
					return false;
				}
			}
		}
		return true;
	}

	public boolean isValidCol(char[][] board, int row, int col) {
		for (int i = 0; i < 9; i++) {
			if (i == row) {
				continue;
			} else {
				if (board[i][col] == board[row][col]) {
					return false;
				}
			}
		}
		return true;
	}

	public boolean isValid33(char[][] board, int row, int col) {
		int numR = row / 3, numC = col / 3;
		for (int i = 3 * numR; i < 3 * numR + 3; i++) {
			for (int j = 3 * numC; j < 3 * numC + 3; j++) {
				if (i == row && j == col) {
					continue;
				} else {
					if (board[i][j] == board[row][col]) {
						return false;
					}
				}
			}
		}
		return true;
	}

	public boolean isValidSudoku(char[][] board) {
		for (int i = 0; i < 9; ++i) {
			for (int j = 0; j < 9; ++j) {
				if (board[i][j] == '.') {
					continue;
				} else {
					if (!(isValidRow(board, i, j) && isValidCol(board, i, j) && isValid33(board, i, j))) {
						return false;
					}
				}
			}
		}

		return true;
	}
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2057

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/105094399