c++数据结构 有效的数独、矩阵置零

36. 有效的数独 - 力扣(LeetCode) (leetcode-cn.com) 

class Solution {
public:
    bool isValidSudoku(vector>& board) {

        int row[9][9];
		int line[9][9];
		int box[9][9];
        for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
                row[i][j]=0;
                line[i][j]=0;
                box[i][j]=0;
            }
        }
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				if(board[i][j] == '.'){
					continue;
				}
				int index = board[i][j] -'0'-1;
				row[i][index]++;
				line[index][j]++;
				box[index][(i/3)*3+j/3]++;
				if(row[i][index] > 1 || line[index][j] > 1 || box[index][(i/3)*3+j/3] > 1){
					return false;
				}
			}
		}
		return true;


    }
};

​​​​​​73. 矩阵置零 - 力扣(LeetCode) (leetcode-cn.com) 

第一行第一列作为标记该行或者该列是否有零,所以不采用格外的数组作为开销。

如果有零就置零。再用两个flag标记第一行第一列是否本身就有零。

class Solution {
public:
    void setZeroes(vector>& matrix) {
       
        if (matrix.size() == 0) return ;
        bool rowflag= false, colflag = false;
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < matrix[0].size(); j++) {
                if (matrix[i][j] == 0) {
                    if (i == 0) rowflag= true;
                    if (j == 0) colflag = true;
                    matrix[0][j] = matrix[i][0] = 0;
                }
            }
        }
        for (int i = 1; i < matrix.size(); i++) {
            for (int j = 1; j < matrix[0].size(); j++) {
                if (matrix[0][j] == 0 || matrix[i][0] == 0) 
                    matrix[i][j] = 0;
            }
        }
        if (colflag)
            for (int i = 0; i < matrix.size(); i++) matrix[i][0] = 0;
        if (rowflag)
            for (int j = 0; j < matrix[0].size(); j++) matrix[0][j] = 0;
    }
    
};

你可能感兴趣的:(c++,数据结构,矩阵)