【数据结构与算法 | 第七篇】二维数组:力扣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;
    }
}

按环形循环填充数组

相关推荐
辰烨chenye26 分钟前
LeetCode Hot 100 题解 · 普通数组篇
算法·leetcode·职场和发展
hqyjzsb4 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
微功夫信息技术4 小时前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
sanjiaomao3335 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
乐迪信息5 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
Interview Aid1125 小时前
Walmart Global Tech SDE 三轮面经|基础、并发、压力面
面试·职场和发展
大圣编蚕6 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
小玮看世界7 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
黎阳之光7 小时前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生