文章目錄
- 😉毛遂自薦
- 🌈題目
- 🔥思路講解
- 🌊三維陣列
- ?采用二維實作
- 😁思路講解
- 😋代碼實作
- 💖最后
Code皮皮蝦 一個沙雕而又有趣的憨憨少年,和大多數小伙伴們一樣喜歡聽歌、游戲,當然除此之外還有寫作的興趣,emm…,日子還很長,讓我們一起加油努力叭🌈
👉話不多說,直達底部有粉絲專享福利!!!
😉毛遂自薦
毛遂自薦一下,給大家推薦一下自己的專欄😁,歡迎小伙伴們收藏關注😊
大廠面試題專欄
Java專欄
爬蟲專欄
更多專欄盡在主頁,點我😁!!!
🌈題目
👉力扣鏈接

注意

🔥思路講解
因為題目給出的范圍
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爬蟲、力扣題解、大廠面試題 四大系列,更有長時間總結的干貨資源分享,后臺回復:面試資料即可領取
最后,祝各位步步高升🚀🚀🚀
粉絲福利👇🏻👇🏻👇🏻
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302001.html
標籤:其他
上一篇:你真的會給變數命名嗎
下一篇:你想知道的字串函式全家桶都在這
