本文主要是介绍LeetCode 36 Valid Sudoku,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
判断一个填了一部分的数独有没有解。
思路:
按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。
代码:
class Solution {
public:bool isValidSudoku(vector <vector<char>> &board) {const int step = 3;bool app[step * step];for (int i = 0; i < step * step; ++i) {memset(app, 0, sizeof(app));for (int j = 0; j < step * step; ++j) {if (board[i][j] != '.') {if (app[board[i][j] - '1']) {return false;} else {app[board[i][j] - '1'] = true;}}}memset(app, 0, sizeof(app));for (int j = 0; j < step * step; ++j) {if (board[j][i] != '.') {if (app[board[j][i] - '1']) {return false;} else {app[board[j][i] - '1'] = true;}}}memset(app, 0, sizeof(app));int x = i / 3 * 3, y = i % 3 * 3;for (int j = 0; j < step * step; ++j) {int dx = j / 3 + x, dy = j % 3 + y;if (board[dx][dy] != '.') {if (app[board[dx][dy] - '1']) {return false;} else {app[board[dx][dy] - '1'] = true;}}}}return true;}};
这篇关于LeetCode 36 Valid Sudoku的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!