Java矩阵运行时错误

2023-12-26

练习信:

给定一个 m x n 元素的矩阵(m 行,n 列),按螺旋顺序返回矩阵的所有元素。

例如,给定以下矩阵:

[
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    You should return [1,2,3,6,9,8,7,4,5].

给定代码:

public class Solution {
  public List<Integer> spiralOrder(int[][] matrix) {
  }
}

My code:

public List<Integer> spiralOrder(int[][] matrix) {
        if(matrix == null || (matrix.length == 0))
            return new ArrayList<Integer>();
        int arriba = 0;
        int derecha = matrix[0].length - 1;
        int abajo = matrix.length - 1;
        int izquierda = 0;
        List<Integer> retorno = new ArrayList<Integer>();
        while(true)
        {
            for(int i = izquierda; i <= derecha; i++)
                retorno.add(matrix[arriba][i]);
            arriba++;
            for(int i = arriba; i <= abajo; i++)
                 retorno.add(matrix[i][derecha]);
            derecha--;
            for(int i = derecha; i >= izquierda; i--)
                retorno.add(matrix[abajo][i]);
            abajo--;
            for(int i = abajo; i >= arriba; i--)
                retorno.add(matrix[i][izquierda]);
            izquierda++;
            if(izquierda >= derecha)
                return retorno;
        }
    }
}

错误:

Runtime Error Message:
Line 13: java.lang.ArrayIndexOutOfBoundsException: 1
Last executed input:
[[1,2,3,4,5,6,7,8,9,10]]

有什么建议么?我实在说不出哪里出了问题。为什么会越界呢? 练习可以找到here https://leetcode.com/problems/spiral-matrix/


我用这个矩阵尝试了你的方法:

int[][] matrix = {{1,2,3},
                  {2,3,4},
                  {3,4,5}};

我没有得到任何ArrayIndexOutOfBoundsException。您的代码似乎没有抛出任何错误。

但是,我注意到输出并不符合预期。它给我的输出是12345432(只有8个号码),缺少号码3在矩阵的中间。

彻底查看您的代码后,我意识到错误在于if(izquierda >= derecha)。如果你将其更改为if(izquierda > derecha)它不会错过3。出于与您执行此操作相同的原因,您还需要检查arriba > abajo,否则您的程序不适用于任何列多于行的矩阵。

Edit:每次 for 循环之后都需要进行这些检查。

我建议你移动return retorno;在 while 循环之外,并插入break在检查中:

public List<Integer> spiralOrder(int[][] matrix) {
    if(matrix == null || (matrix.length == 0))
        return new ArrayList<Integer>();
    int arriba = 0;
    int derecha = matrix[0].length - 1;
    int abajo = matrix.length - 1;
    int izquierda = 0;
    List<Integer> retorno = new ArrayList<Integer>();
    while(true)
    {
        for(int i = izquierda; i <= derecha; i++)
            retorno.add(matrix[arriba][i]);
        arriba++;
        if(arriba > abajo)
            break;

        for(int i = arriba; i <= abajo; i++)
             retorno.add(matrix[i][derecha]);
        derecha--;
        if(izquierda > derecha)
            break;

        for(int i = derecha; i >= izquierda; i--)
            retorno.add(matrix[abajo][i]);
        abajo--;
        if(arriba > abajo)
            break;

        for(int i = abajo; i >= arriba; i--)
            retorno.add(matrix[i][izquierda]);
        izquierda++;
        if(izquierda > derecha)
            break;
    }
    return retorno;
}

您的代码的说明(根据要求):想象一下,您有一个矩阵,四个人站在它周围 - 每个人站在一侧。这四个人被称为arriba, derecha, abajo, and izquierda:

           arriba
          1 2 3 4 5
izquierda 2 3 4 5 6 derecha
          3 4 5 6 7
            abajo

这四个人可以看到他们面前的一行数字:

  • arriba sees 1 2 3 4 5.
  • derecha sees 5 6 7.
  • abajo sees 3 4 5 6 7.
  • izquierda sees 1 2 3.

每当这些人前面的所有数字都添加到列表中时retorno,他们向前跳跃了一步。例如,在第一个 for 循环之后,它看起来像这样:

          1 2 3 4 5
           arriba
izquierda 2 3 4 5 6 derecha
          3 4 5 6 7
            abajo

在整个 while 循环的第一次迭代之后,它们是这样的:

1           2 3 4         5
           arriba
2 izquierda 3 4 5 derecha 6
            abajo
3           4 5 6         7
  • arriba正在向下移动。
  • derecha正在向左移动。
  • abajo正在向上移动。
  • izquierda正在向右移动。

立刻any这两个人经过对方,你知道他们之间没有数字,你需要停止循环立即地。这就是为什么你需要检查两个人是否已经互相擦肩而过每次有人迈出了一步(在每个 for 循环之后)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java矩阵运行时错误 的相关文章

随机推荐

  • 手机上的陀螺仪漂移

    很多帖子都讨论了陀螺仪漂移问题 有些人说陀螺仪读数有漂移 但其他人说积分有漂移 原始陀螺仪读数有漂移 link https stackoverflow com questions 1586658 combine gyroscope and
  • 在 ASCIIFoldingFilter 中使用静态“foldToAscii”方法

    我一直在使用 ASCII 折叠过滤器来处理变音符号 不仅适用于弹性搜索中的文档 还适用于各种其他类型的字符串 public static String normalizeText String text boolean shouldTrim
  • 单个解析服务器中的多个应用程序

    我花了整整一周的时间将 parse com 上托管的应用程序迁移到解析服务器 设法使一切完美运行 唯一的问题是让它在单个硬件上运行多个应用程序 而无需为此分配服务器应用程序它有 它会变得昂贵 我读了这个讨论 https github com
  • android 多数据源的分页库DataSource.Factory

    我有多个数据源 但只有一个DataSourceFactory 因此 所有来源都共享一个工厂 我需要每个数据源一个 DataSourceFactory 在我的应用程序中 我有多个 RecyclerViews 视图 因此有多个自定义数据源 那么
  • PHP 5.4 中删除 safe_mode 后的安全性在哪里

    我心里有一个棘手的问题 safe modePHP 5 4 中已删除 那么此删除的安全性如何 这是否意味着任何应用程序都可以执行任何程序 为此目的使用什么技术来防止此类暴力行为 本文 http ilia ws archives 18 PHPs
  • java.lang.SecurityException AWSCredentialsProvider 签名者信息不匹配

    我正在使用 2 个亚马逊提供的库 redshift jdbc42 1 2 27 1051 and aws java sdk core 1 11 600 两个库都定义了一个类AWSCredentialsProvider包装下com amazo
  • 将文件从服务器下载到 Ionic2 应用程序中

    我需要在我的中实现一个功能Ionic2用户可以将特定视频文件下载到 Ionic2 应用程序中 经检查Ionic Native部分 我发现以下插件可用 File 文件选择器 文件开启器 文件路径 但找不到诸如 cordova 插件 文件传输
  • 如何在Windows 10上更改Node JS进程名称?

    我有一个node js在 Windows 10 上运行的进程 我想更改进程的名称 以便可以获得一些性能详细信息 我尝试改变流程 标题的财产process对象但是 它不会反映在电源外壳中 我只能找到node作为进程名称 有没有其他方法可以更改
  • Exhaustive-deps 规则无法将自定义挂钩的结果识别为 React 参考

    想象一个钩子 export function useMounted const mounted React useRef
  • Spring Boot 多数据库:没有 EntityManagerFactoryBuilder 类型的合格 bean

    我们的 Spring Boot 应用程序中有两个数据库 称为源数据库和目标数据库 这是这些的配置 源配置 package com alex myapp config import javax persistence EntityManage
  • PHP 字符串类型提示 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在另一个线程完成时停止一个线程

    我有这个代码 Thread thread1 new Thread this DoSomething1 Thread thread2 new Thread this DoSomething2 thread1 Start thread2 Sta
  • OpenSSL:加密/解密例程的输入和输出缓冲区可以相同吗?

    例如 在 int EVP EncryptUpdate EVP CIPHER CTX ctx unsigned char out int outl unsigned char in int inl can out in 我只是偶然发现这个问题
  • 如何限制临时表的大小?

    我的数据库中有较大的 InnoDB 表 显然 用户能够使用 JOIN 进行 SELECT 从而生成临时的大型 因此位于磁盘上 表 有时 它们太大以至于耗尽了磁盘空间 导致各种奇怪的问题 有没有办法限制临时表的最大大小对于磁盘上的表 这样表就
  • 将参数值作为rails中的查询字符串传递给redirect_to

    这应该很简单 但我似乎找不到简单的答案 如何将当前请求中的参数值传递到redirect to 调用中 我想将一些表单值传递到 GET 重定向的查询字符串中 我想做这样的事情 redirect to thing foo gt params f
  • 查找多个 NumPy 数组的中值

    我有一个创建大约 50 个数组的 for 循环 数组的长度为 240 我试图找出计算数组每个元素的中值的最佳方法 本质上 我想获取循环中创建的每个数组的第一个元素 将它们放入列表中 然后找到中位数 然后对其他 239 个元素执行相同的操作
  • jit 会优化新对象吗

    我创建这个类是为了不可变并且具有流畅的 API public final class Message public final String email public final String escalationEmail public
  • 唤醒 Heroku 应用程序

    因此 我的 heroku NODE js 应用程序一直在运行 今天我通过我的 url 再次尝试它 但由于某种原因 它给了我一条应用程序错误消息 我阅读并登录到我的仪表板 它说该应用程序正在睡眠 我有 Heroku 的免费套餐 我知道该应用程
  • 如何删除 ExpandableListView 中父级和子级之间的特定空间

    Can you help me identify why there is a space between the group and the child In my case I want spaces between all group
  • Java矩阵运行时错误

    练习信 给定一个 m x n 元素的矩阵 m 行 n 列 按螺旋顺序返回矩阵的所有元素 例如 给定以下矩阵 1 2 3 4 5 6 7 8 9 You should return 1 2 3 6 9 8 7 4 5 给定代码 public