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

按环形循环填充数组

相关推荐
Rain的Java大神之路1 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
NEFU_Jyj1 小时前
贝尔数(组合数学)
算法
希和20272 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Pniubi2 小时前
力扣73 矩阵置零
算法·leetcode·矩阵
布莱克60512 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH15 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz16 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机18 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂18 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛