36. 有效的數獨
自己做
解:多層for

class Solution {
public:bool isValidSudoku(vector<vector<char>>& board) {int hight = board.size(); //長if (hight == 0)return true;int wide = board[0].size(); //寬//判斷一行是否出現重復bool unique = true;for (int i = 0; i < hight; i++) //遍歷每一行for (int j = 0; j < wide; j++) //對一行的元素判斷是否出現有重復(兩重for實現)for (int z = j + 1; z < wide; z++)if (board[i][j] != '.' && board[i][j] == board[i][z]) { //出現重復unique = false;cout << i << "," << j << "與" << z << "重復" << endl;}if (unique == false) //行出現重復return false;//判斷一列是否出現重復for (int i = 0; i < wide; i++) //遍歷每一列for (int j = 0; j < hight; j++) //對一列的元素判斷是否出現有重復(兩重for實現)for (int z = j + 1; z < hight; z++)if (board[j][i] != '.' && board[j][i] == board[z][i]) //出現重復unique = false;if (unique == false) //列出現重復return false;//判斷3*3是否出現重復for (int i = 0; i < hight; i += 3) //遍歷每個3*3,(i,j)標記一個3*3的起始,從(0,0)到(6,6)for (int j = 0; j < wide; j += 3) {//對于3*3內的判斷//檢查有無重復元素【將board[i + z % 3][j + z / 3]與其余元素對比】for (int z = 0; z < 9; z++)for (int k = z + 1; k < 9; k++) {if (board[i + z % 3][j + z / 3] != '.' && board[i + z % 3][j + z / 3] == board[i + k % 3][j + k / 3])unique = false;}}if (unique == false) //3*3出現重復return false;//經過上面的判斷全部通過,說明符合條件,返回return true;}
};
