【数据结构与算法 | 第七篇】二维数组:力扣48,54,59,151

力扣48题

复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        
        // 第一步:转置矩阵(沿主对角线翻转)
        // 相当于字符串反转中的"反转整个字符串"
        for (int i = 0; i < n; i++) {
            // j 从 i 开始,只遍历上三角区域,避免重复交换
            for (int j = i; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        
        // 第二步:反转每一行
        // 相当于字符串反转中的"反转每个单词"
        for (int i = 0; i < n; i++) {
            int left = 0, right = n - 1;
            while (left < right) {
                int temp = matrix[i][left];
                matrix[i][left] = matrix[i][right];
                matrix[i][right] = temp;
                left++;
                right--;
            }
        }
    }
}

我们这里用到先转整体再转头尾

1.按对角线用二维数组将他转下

2.头尾换

这样就能得到90度转换后的数组了

力扣151:151. 反转字符串中的单词 - 力扣(LeetCode)

复制代码
class Solution {
    public String reverseWords(String s) {
        // \\s+ 表示按"一个或多个空格"分割,trim 去掉首尾空格
        String[] words = s.trim().split("\\s+");
        StringBuilder sb = new StringBuilder();
        for (int i = words.length - 1; i >= 0; i--) {
            sb.append(words[i]);
            if (i > 0) sb.append(" ");
        }
        return sb.toString();
    }
}

其实就是用Java本身的api把空格删掉,然后从后往前来输出

力扣54题54. 螺旋矩阵 - 力扣(LeetCode)

!\[屏幕截图 2026-07-29 090956.png]

复制代码
class Solution {

    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result=new ArrayList();
        int m[][]=matrix;
        while(m !=null && m.length>0){
        for(int i=0;i<m[0].length;i++){
            result.add(m[0][i]);
        }
        m=addleft(m);
        }
        return result;
    }

  

    private int[][] addleft(int[][]m){
            int rows=m.length-1;
            int col=m[0].length;
            if(rows<=0)return null;
		int res[][]=new int[col][rows];
		
            for(int i=0;i<rows;i++){
                for (int j = 0; j < col; j++) {
                   res[j][i]=m[i+1][j];
                }
            }
            for(int i=0;i<rows;i++){
                int left=0;
                int right=col-1;
                while(left<right){
                    int t=res[left][i];
                    res[left][i]=res[right][i];
                    res[right][i]=t;
                    left++;
                    right--;
                }
            }return res;

    }

}

每次遍历第一行,然后把剩下的顺时针旋转90度,然后首尾交换,再遍历第一行.

力扣59题:

59. 螺旋矩阵 II - 力扣(LeetCode)

复制代码
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int top = 0, bottom = n - 1;
        int left = 0, right = n - 1;
        int num = 1;

        while (top <= bottom && left <= right) {
            // ① 向右:填 top 行,从 left 到 right
            for (int j = left; j <= right; j++) {
                matrix[top][j] = num++;
            }
            top++;

            // ② 向下:填 right 列,从 top 到 bottom
            for (int i = top; i <= bottom; i++) {
                matrix[i][right] = num++;
            }
            right--;

            // ③ 向左:填 bottom 行,从 right 到 left
            if (top <= bottom) {
                for (int j = right; j >= left; j--) {
                    matrix[bottom][j] = num++;
                }
                bottom--;
            }

            // ④ 向上:填 left 列,从 bottom 到 top
            if (left <= right) {
                for (int i = bottom; i >= top; i--) {
                    matrix[i][left] = num++;
                }
                left++;
            }
        }
        return matrix;
    }
}

按环形循环填充数组

相关推荐
罗西的思考4 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer4 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
文丑颜不良啊5 小时前
LeetCode51~75题目解析
leetcode
高晶5 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy6 小时前
大数计算思路
算法
高晶6 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗6 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
用户老李6 小时前
反向传播计算梯度举例
算法
niyongsheng6 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人
招聘背调实务专家杨宏6 小时前
上级评价出现主观偏差与口径冲突时如何校准
职场和发展