[leetcode_73]Set Matrix Zeroes

给一个m*n矩阵,将该矩阵中出现0元素的位置的行列均置为0。
最简单的方法,开一个m*n的矩阵记录,再设置就行了。
更简单的是:开一个m+n的矩阵记录行列就可以了。
更更简单的常数空间的方法,我想了一种,有点问题,正在琢磨,先把m+n的解法贴出来吧。
一次AC。
附上代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
    public:
        void setRZeros(vector<vector<int> > &matrix,int x)
        {
            int m = matrix.size();
            int n = matrix[0].size();
            for(int i = 0;i < n;i++)
            {
                matrix[x][i] = 0;
            }
        }
        void setCZeros(vector<vector<int> > &matrix,int y)
        {
            int m = matrix.size();
            int n = matrix[0].size();
            for(int i = 0;i < m;i++)
            {
                matrix[i][y] = 0;
            }
        }
        void setZeroes(vector<vector<int> > &matrix) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            int m = matrix.size();
            int n = matrix[0].size();
            int *R = new int[m];
            int *C = new int[n];
            memset(R,0,m*sizeof(int));
            memset(C,0,n*sizeof(int));
            for(int i = 0;i < m;i++)
            {
                for(int j = 0;j < n;j++)
                {
                    if(matrix[i][j] == 0)
                    {
                        R[i] = 1;
                        C[j] = 1;
                    }
                }
            }
            for(int i = 0;i < m;i++)
            {
                if(R[i])
                    setRZeros(matrix,i);
            }
            for(int i = 0;i < n;i++)
            {
                if(C[i])
                    setCZeros(matrix,i);
            }
        }
};
Licensed under CC BY-NC-SA 4.0