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

按环形循环填充数组

相关推荐
ysa0510302 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
shwill1232 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
wabs6663 小时前
关于图论【卡码网110.字符串迁移的思考】
数据结构·算法·图论
hanlin033 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
only-qi5 小时前
大模型Agent面试攻略:落地工程痛点、评估体系与Agentic RAG核心精讲
人工智能·算法·面试·职场和发展·langchain·rag
数字宝藏5 小时前
15本电子书分享
职场和发展·职场发展·教育电商
Gauss松鼠会7 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
oier_Asad.Chen7 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先
逻辑君7 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人
冻柠檬飞冰走茶7 小时前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法