[LeetCode-面試01.08]零矩陣

一.題目:

編寫(xiě)一種算法,若M × N矩陣中某個(gè)元素為0,則將其所在的行與列清零。

示例 1:
輸入:
[[1,1,1],
[1,0,1],
[1,1,1]]
輸出:
[[1,0,1],
[0,0,0],
[1,0,1]]

示例 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]]

二題解:

1.第一種解法:

(1)解題思路:

  • 利用兩個(gè)HashSet表row_set,col_set存儲(chǔ)矩陣元素為0的橫縱坐標(biāo)
  • 再根據(jù)橫坐標(biāo)row_set,將元素0所在行重置為0
  • 再根據(jù)縱坐標(biāo)col_set,將元素0所在列重置為0

(2)具體實(shí)現(xiàn):

  • 利用HashSet表記錄矩陣中元素為0的下標(biāo),其中row_set記錄元素0所在的行數(shù),col_set記錄元素0所在的列數(shù)
  • 再利用for循環(huán),循環(huán)元素為int row_index,row_set將行數(shù)為row_set中成員所在行重置為0,Arrays.fill(matrix[row_index],0);
  • 再利用嵌套for循環(huán),將0元素所在的列重置為0
  • 外循環(huán)循環(huán)元素為 int col_index,col_set,內(nèi)循環(huán)為下標(biāo)為i,從0開(kāi)始遍歷,直到matrix.length-1
  • 內(nèi)層循環(huán)下標(biāo)為i,從0開(kāi)始,遍歷到matrix[0].length-1,matrix[i][col_index]=0;
  • 循環(huán)結(jié)束即轉(zhuǎn)換完畢

(3)代碼:

    public static int[][] setZeros(int[][] matrix){
        HashSet<Integer> row_set = new HashSet<Integer>();
        HashSet<Integer> col_set = new HashSet<Integer>();

        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(matrix[i][j]==0){
                    row_set.add(i);
                    col_set.add(j);
                }
            }
        }

        for(int row_index:row_set){
            Arrays.fill(matrix[row_index],0);
        }
        for(int col_index:col_set){
            for(int i=0;i<matrix[0].length;i++){
                matrix[i][col_index]=0;
            }
        }
        return matrix;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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