LeetCode數組操作高頻題(六)

54. 螺旋矩陣

在這裏插入圖片描述

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        //判空
        if(matrix == null || matrix.length == 0){
            return ans;
        }
        //行
        int m = matrix.length;
        //列
        int n = matrix[0].length;
        //層數
        int count = (Math.min(m,n) + 1)/2;

        int i = 0;
        //一層一層打印
        while(i < count){
            //從左向右
            for(int j = i;j < n - i; j++){
                ans.add(matrix[i][j]);
            }
            //從上向下
            for(int j = i + 1;j < m - i;j++){
                ans.add(matrix[j][(n - 1) - i]);
            }
            //從右往左,若該層只有一行,那麼在第一次循環的時候已經打印過
            for(int j = (n - 1) - (i + 1);j >= i && (m - 1 - i != i);j--){
                ans.add(matrix[m - 1 - i][j]);
            }
            //從下向上,若該層只有一列,那麼在第二次循環的時候已經打印過
            for(int j = (m - 1 - (i + 1));j >= i + 1 && (n - 1 - i ) != i;j--){
                ans.add(matrix[j][i]);
            }
            i++;
        }
        return ans;
    }
}

73. 矩陣置零

在這裏插入圖片描述

class Solution {
    public void setZeroes(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        boolean row0_flag = false;
        boolean col0_flag = false;

        //第0行是否有0
        for(int i = 0;i < col;i++){
            if(matrix[0][i] == 0){
                row0_flag = true;
                break;
            }
        }
        //第0列是否有0
        for(int j = 0;j < row;j++){
            if(matrix[j][0] == 0){
                col0_flag = true;
                break;
            }
        }

        //以第0行和第0列爲標誌位
        for(int i = 1;i < row;i++){
            for(int j = 1;j < col;j++){
                if(matrix[i][j] == 0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        //置0
        for(int i = 1;i < row;i++){
            for(int j = 1;j < col;j++){
                if(matrix[i][0] == 0 || matrix[0][j] == 0){
                    matrix[i][j] = 0;
                }
            }
        }

        if(row0_flag){
            for(int i = 0;i < col;i++){
                matrix[0][i] = 0;
            }
        }
        if(col0_flag){
            for(int j = 0;j < row;j++){
                matrix[j][0] = 0;
            }
        }
    }
}

945. 使數組唯一的最小增量

在這裏插入圖片描述

class Solution {
    public int minIncrementForUnique(int[] A) {
        // 先排序
        Arrays.sort(A);
        int move = 0;
        // 遍歷數組,若當前元素小於等於它的前一個元素,則將其變爲前一個數+1
        for (int i = 1; i < A.length; i++) {
            if (A[i] <= A[i - 1]) {
                int pre = A[i];
                A[i] = A[i - 1] + 1;
                move += A[i] - pre;
            }
        }
        return move;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章