当前位置: 首页 > article >正文

54.螺旋矩阵(Java)

题目描述:

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

在这里插入图片描述

输入:

matrix = [[1,2,3],[4,5,6],[7,8,9]]

输出:

[1,2,3,6,9,8,7,4,5]

代码实现:

import java.util.ArrayList;
import java.util.List;
//螺旋矩阵
public class Main{
    public static void main(String[] args) {
        //案例
        int[][] matrix = new int[][]{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
        System.out.println(spiralOrder(matrix));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
    }

    /**
     * 定义边界之后,顺时针遍历,不断调整边界的范围
     *
     * @param matrix 输入数组
     * @return 输出动态数组
     */
    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list = new ArrayList<>();//创建集合存储元素
        //上边界
        int up = 0;
        //左边界
        int left = 0;
        //下边界
        int down = matrix.length - 1;
        //右边界
        int right = matrix[0].length - 1;
        //遍历
        while (right >= 0 && up < down && left <= right) {//防止越界
            //遍历上边界
            for (int i = left; i < right; i++) {
                list.add(matrix[up][i]);//行不变
            }
            //遍历右边界
            for (int i = up; i < down; i++) {
                list.add(matrix[i][right]);//列不变
            }
            //遍历下边界
            for (int i = right; i > left; i--) {
                list.add(matrix[down][i]);//行不变
            }
            //遍历左边界
            for (int i = down; i > up; i--) {
                if (left == right) {
                    //特判:当有超过两个元素为一列时,只存入左下角元素
                    list.add(matrix[down][left]);
                    break;
                } else {
                    list.add(matrix[i][left]);//列不变
                }
            }
            //四周边界缩小一个单位
            up++;
            right--;
            down--;
            left++;
        }
        //遍历up等于down的一行元素
        if (up == down) {
            for (int i = left; i <= right; i++) {
                list.add(matrix[up][i]);
            }
        }
        return list;
    }
}


http://www.kler.cn/news/233108.html

相关文章:

  • 【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习
  • 利用Pybind11封装Python版的WiringPi!
  • 【QT+QGIS跨平台编译】之三十:【NetCDF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • 用HTML5实现灯笼效果
  • 文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题
  • shell脚本之无限计时器
  • Android:Volley框架使用
  • Linux嵌入式开发+驱动开发-中断
  • 栈的基本操作
  • Kafka 使用手册
  • Flink从入门到实践(一):Flink入门、Flink部署
  • CSP-202012-1-期末预测之安全指数
  • 秒杀相关问题解决
  • 【JavaScript】函数声明和调用
  • 排序算法---归并排序
  • Linux应用开发---网络通信
  • Qt网络编程-写一个简单的网络调试助手
  • 【深度学习】:滴滴出行-交通场景目标检测
  • Unity3d Shader篇(五)— Phong片元高光反射着色器
  • University Program VWF仿真步骤__全加器
  • 开发JSP应用程序
  • FastJson、Jackson使用AOP切面进行日志打印异常
  • NBA2K24 陈盈骏面补
  • Mysql报错处理
  • 个人搜集的gstreamer学习链接
  • 《动手学深度学习(PyTorch版)》笔记8.2
  • kettle--文本文件输出有空格解决方案
  • 264. 丑数 II
  • flutter使用qr_code_scanner扫描二维码
  • 嵌入式学习Day17 linux高级编程 -- 输入输出