欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

36. Valid Sudoku数独判断

发布时间:2025/5/22 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 36. Valid Sudoku数独判断 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目:数独填写正确判断

https://leetcode.com/problems/valid-sudoku/description/

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.

Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.(数独全部完成或部分完成)

 

题意是:

  比如一个人在玩数独游戏,他只填写了一部分或全部完成。

  程序的目的是:检查在目前,不管是否完成,已经填写的数独填写是否正确(行、列、区块中每个数字均不能重复)。

  什么是区块?看下图任意三行三列组成的九格是一个区块:

解决方法:

程序中为判断数独是否填写正确,用三个二维数组分别标记行、列、区块:row[i][num]: 在i行,num是否已经存在,存在的话row[i][num] = 1;col[j][num]: 在j列,num是否已经存在 block[k][num]: 在k区块,num是否已经存在 注意区块k的计算方法: 例如在i行j列的一个数,它属于的区块是:k = i / 3 * 3 + j / 3;

  程序如下:

class Solution { public:bool isValidSudoku(vector<vector<char> > &board){int row[9][9] = {0}, col[9][9] = {0}, block[9][9] = {0};for(int i = 0; i < board.size(); ++ i) //for(int j = 0; j < board[i].size(); ++ j) //if(board[i][j] != '.') //空的地方被标记为‘.’ { int num = board[i][j] - '0' - 1; //当前数是多少int k = i / 3 * 3 + j / 3; //属于哪个小方格。(把一个位置的行(i)列(j)如此计算之后就可以得到它属于哪个block)if(row[i][num] || col[j][num] || block[k][num]) //如果在某行,某列,某个区块这个数已经存在,那么返回falsereturn false;row[i][num] = col[j][num] = block[k][num] = 1; //标记这个数在这个行,列区块是存在的, }return true;} };

 

转载于:https://www.cnblogs.com/hozhangel/p/7847048.html

总结

以上是生活随笔为你收集整理的36. Valid Sudoku数独判断的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。