✨【Code皮皮虾】多方法,全面注释解析,解决——>《36. 有效的数独》
【摘要】 ✨【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皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以==一键三连哦!==,感谢支持,我们下次再见~~~
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)