矩陣置零

給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地算法

示例 1:

輸入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
輸出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
</pre>

示例 2:

輸入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
輸出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]</pre>

進階:

  • 一個直接的解決方案是使用 O(mn) 的額外空間,但這并不是一個好的解決方案。
  • 一個簡單的改進方案是使用 O(m + n) 的額外空間,但這仍然不是最好的解決方案。
  • 你能想出一個常數(shù)空間的解決方案嗎?
class Solution {
    public void setZeroes(int[][] matrix) {
        List<Integer> row=new ArrayList<>();
        List<Integer> col=new ArrayList<>();
       
        for(int i=0;i<matrix.length;++i){
            for(int j=0;j<matrix[0].length;++j){
                if(matrix[i][j]==0){
                    row.add(i);
                    col.add(j);
                    
                    System.out.println(i+""+j);
                }
            }
        }
       // System.out.println(row.length+" "+col.length);
        
        for(int i=0;i<row.size();++i){
            for(int j=0;j<matrix[0].length;++j){
                matrix[row.get(i)][j]=0;
                
            }
            for(int k=0;k<matrix.length;++k){
                matrix[k][col.get(i)]=0;
            }
            
        }
        
    }
}
class Solution {
    public void setZeroes(int[][] matrix) {
        int row=matrix.length;
        int col=matrix[0].length;
        boolean fr=false;
        boolean fc=false;
        
        for(int i=0;i<matrix.length;++i){
            for(int j=0;j<matrix[0].length;++j){
                
                if(matrix[i][j]==0){
                    if(i==0){
                        fr=true;
                    }
                    if(j==0){
                        fc=true;
                    }
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
        }
        
        for(int j=1;j<matrix[0].length;++j){
            if(matrix[0][j]==0){
                for(int i=0;i<matrix.length;++i){
                    matrix[i][j]=0;
                }
            }
        }
 
        for(int i=1;i<matrix.length;++i){
            if(matrix[i][0]==0){
                for(int j=0;j<matrix[0].length;++j){
                    matrix[i][j]=0;
                }
            }
        }
        
        if(fr){
            for(int i=0;i<matrix[0].length;++i){
                matrix[0][i]=0;
            }
        }
        
        if(fc){
            for(int j=0;j<matrix.length;++j){
                matrix[j][0]=0;
            }
        }
    }
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地算法。 示例 1...
    1f872d1e3817閱讀 579評論 0 0
  • 73. 矩陣置零 描述 給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請...
    GoMomi閱讀 240評論 0 0
  • 給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地算法。 進階: ...
    susu2016閱讀 2,396評論 0 2
  • 給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地算法。 示例 1...
    Houtasu閱讀 805評論 0 0
  • 1 先講一個漢代的鬼故事,出自《列異傳》: 從前有個姓談的書生,家境貧寒,四十歲了還沒娶到媳婦。 俗話說,人窮就該...
    風流人物志閱讀 783評論 1 6

友情鏈接更多精彩內(nèi)容