LeetCode之1252. 奇數值單元格的數目

概要

題目來源鏈接:https://leetcode-cn.com/problems/cells-with-odd-values-in-a-matrix/

難度:簡單

類型:數組

題目

給你一個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。

另有一個索引數組 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分別表示指定的行和列(從 0 開始編號)。

你需要將每對 [ri, ci] 指定的行和列上的所有單元格的值加 1。

請你在執行完所有 indices 指定的增量操作後,返回矩陣中 「奇數值單元格」 的數目。

示例

示例 1:

輸入:n = 2, m = 3, indices = [[0,1],[1,1]]
輸出:6
解釋:最開始的矩陣是 [[0,0,0],[0,0,0]]。
第一次增量操作後得到 [[1,2,1],[0,1,0]]。
最後的矩陣是 [[1,3,1],[1,3,1]],裏面有 6 個奇數。
示例 2:

輸入:n = 2, m = 2, indices = [[1,1],[0,0]]
輸出:0
解釋:最後的矩陣是 [[2,2],[2,2]],裏面沒有奇數。


提示:

1 <= n <= 50
1 <= m <= 50
1 <= indices.length <= 100
0 <= indices[i][0] < n
0 <= indices[i][1] < m

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/cells-with-odd-values-in-a-matrix
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

示例1的圖片

示例2的圖片:

分析

以示例爲例來分析本題,給出的n和m表示一個n行m列數據元素是0的矩陣,即[[0,0,0],[0,0,0]]。然後是indices矩陣,這是一個二維數組構成的,indices = [[0,1],[1,1]]其中indices[0][0]=0,indices[0][1]=1,indices[1][0]=1,indices[1][1]=1,表示的是indices數組中的元素值,indices[0][0]=0中等於的這個0指的是n行m列矩陣的第一行所有元素加1,即[[1,1,1][0,0,0]];indices[0][1]=1中等於的這個1指的是n行m列矩陣的第二列所有元素加1,即[[1,2,1][0,1,0]];indices[1][0]=1中等於的這個1指的是n行m列劇中的第二行所有元素加1,即[[1,2,1][1,2,1]];indices[1][1]=1中等於的這個1指的是n行m列劇中的第二列所有元素加1,即[[1,3,1][1,3,1]]。畫個圖容易理解些,文字感覺有些繞。

作者下面提供的代碼是暴力破解的思路,將按照indices矩陣對n行m列矩陣進行增量操作,對操作完成後的矩陣再遍歷每個元素是否是奇數,來計算奇數的個數。

更加好的思路請參考LeetCode上的題解,有很多人的思路都非常好。

代碼

Java代碼

    /**
     * 奇數值單元格的數目
     *
     * @param n       表示幾行
     * @param m       表示幾列
     * @param indices 索引數組
     * @return 返回奇數值單元格的數目
     */
    public int oddCells(int n, int m, int[][] indices) {
        // 創建0矩陣,並賦予0值
        int[][] arr = new int[n][m];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = 0;
            }
        }
        // 根據索引矩陣添加0矩陣中指定行的值
        for (int k = 0; k < indices.length; k++) {
            for (int j = 0; j < arr[0].length; j++) {
                arr[indices[k][0]][j] += 1;
            }
        }
        // 根據索引矩陣添加0矩陣中指定列的值
        for (int q = 0; q < indices.length; q++) {
            for (int i = 0; i < arr.length; i++) {
                arr[i][indices[q][1]] += 1;
            }
        }
        // 最後在完成矩陣後遍歷查找奇數單元值的個數
        return findMatrixOdd(arr);
    }

    /**
     * 尋找矩陣中元素是奇數的元素個數
     * @param matrix 矩陣
     * @return 返回元素是奇數的個數
     */
    public int findMatrixOdd(int[][] matrix) {
        int count = 0;// 計數器,記錄元素是奇數的個數,初始值爲0
        for (int i = 0; i < matrix.length; i++) {// 循環遍歷二維數組
            for (int j = 0; j < matrix[i].length; j++) {
                if (matrix[i][j] % 2 != 0) {// 判斷二維數組中的每個元素是否是奇數
                    count++;// 如果不是奇數,則計數器加1
                }
            }
        }
        return count;// 返回計數器結果
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章