✨Code皮皮虾多方法,全面注释解析,解决——>《36. 有效的数独》
Posted Code皮皮虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了✨Code皮皮虾多方法,全面注释解析,解决——>《36. 有效的数独》相关的知识,希望对你有一定的参考价值。
Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈
😉毛遂自荐
毛遂自荐一下,给大家推荐一下自己的专栏😁,欢迎小伙伴们收藏关注😊
🌈题目
注意
🔥思路讲解
因为题目给出的范围
board.length == 9
board[i].length == 9
board[i][j] 是一位数字或者 ‘.’
所以,以示例一为例,整个数组分为9个小数组
,每个小数组中不能出现重复数字
,可采用 / 3的方式确定在哪个小数组
所以,我们可以采用三维数组的方式来实现
🌊三维数组
class Solution {
public boolean isValidSudoku(char[][] board) {
//因为数字 1-9 在每一行只能出现一次。
int[][] rows = new int[9][9];
//因为数字 1-9 在每一列只能出现一次。
int[][] cols = new int[9][9];
//三维,数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
int[][][] tmps = new int[3][3][9];
//一次遍历
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char c = board[i][j];
//如果当前字符不是 . 才进行判断
if (c != '.') {
//将字符转化为int类型的索引
int index = c - '0' - 1;
//当前行,这个索引,即这个数字已经出现一次
rows[i][index]++;
//当前列,这个索引,即这个数字已经出现一次
cols[j][index]++;
//当前这个小数组,这个索引,即这个数字已经出现一次,通过 / 3来确定在哪个小数组
tmps[i / 3][j / 3][index]++;
//条件判断,如果 > 1,说明重复,则return false;
if (rows[i][index] > 1 || cols[j][index] > 1 || tmps[i / 3][j / 3][index] > 1) {
return false;
}
}
}
}
return true;
}
}
⛄采用二维实现
😁思路讲解
想要从三维降到二维,就需要通过巧妙的方法来确定在哪个小数组,这是关键!!!
如何确定?
公式先告诉大家:(i / 3) * 3 + j / 3
,通过这个公式就可以确定,不信我们来验证验证🔥
以示例一为例
- 比如说:第三个小数组中的6,它的坐标为
(2,7)
,通过公式得出(2 / 3) * 3 + 7 / 3 = 2,也就是下标为2的小数组也就是第三个数组
- 再来,第七个小数组中的6,它的坐标为
(6,1)
,通过公式得出(6 / 3) * 3 + 1 / 3 = 6,下标为6,也就是第七个小数组
😋代码实现
class Solution {
public boolean isValidSudoku(char[][] board) {
int[][] rows = new int[10][10];
int[][] cols = new int[10][10];
//三维降二维
int[][] tmps = new int[10][10];
char ch = ' ';
int tmp = 0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
ch = board[i][j];
if (ch == '.') continue;
tmp = ch - '0';
//套公式计算在哪个小数组
int idx = i / 3 * 3 + j / 3;
rows[i][tmp] += 1;
cols[j][tmp] += 1;
tmps[idx][tmp] += 1;
if (rows[i][tmp] > 1 || cols[j][tmp] > 1 || tmps[idx][tmp] > 1) return false;
}
}
return true;
}
}
当然,也可以通过boolean数组来判断
💖最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以一键三连哦!,感谢支持,我们下次再见~~~
公众号干货内容输出,囊括Java、Python爬虫、力扣题解、大厂面试题 四大系列,更有长时间总结的干货资源分享,后台回复:面试资料即可领取
最后,祝各位步步高升🚀🚀🚀
粉丝福利👇🏻👇🏻👇🏻
以上是关于✨Code皮皮虾多方法,全面注释解析,解决——>《36. 有效的数独》的主要内容,如果未能解决你的问题,请参考以下文章
Code皮皮虾求最长递增子序列的个数 不是长度哦(手动滑稽)!!!