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;}
};
