大家在 OJ 上做题的时候,有没有碰到过这样的情况?求各位大大指点,挺急的

2017 年 2 月 24 日
 diangdiang

这几天碰到两次线上有 case 通不过,但是相同的 case 在本地上却能给出正确的结果,本地和线上的代码一样。 比如这道题 https://leetcode.com/problems/spiral-matrix/?tab=Description

代码有点丑如下:

import java.util.*;
public class Solution {
    public static List<Integer> spiralOrder(int[][] matrix) {
        if (matrix == null || matrix.length == 0)
            return new LinkedList<Integer>();

        int m = matrix.length;
        int n = matrix[0].length;

        int left = 0;
        int right = n-1;
        int top = 0;
        int bottom = m-1;
        List<Integer> spiral = new LinkedList<>();
        int k = 0;
        while (k < m*n) {
            int i = top;
            int j = left;
            for (; j <= right; j++) {
                spiral.add(matrix[i][j]);
                k++;
            }
            i++; j--;
            for (; i <= bottom; i++) {
                spiral.add(matrix[i][j]);
                k++;
            }

            i--; j--;
            for (; j >= left; j--) {
                spiral.add(matrix[i][j]);
                k++;
            }

            i--; j++;

            for (; i > top; i--) {
                spiral.add(matrix[i][j]);
                k++;
            }

            top++;
            left++;
            bottom--;
            right--;
        }
        return spiral;

    }

    public static void main(String[] args) {
        int[][] mat = {
            {2},
            {3}
        };

        List<Integer> spiral = spiralOrder(mat);
        for (Integer num: spiral)
            System.out.printf("%d ", num);
        System.out.println();

    }
}


[[2,3]] 这个 case 本地得到是[2,3]。


leetcode 给的结果是

Input: [[2,3]]

Output:[2,3,2]

Expected:[2,3]
2601 次点击
所在节点    程序员
11 条回复
diangdiang
2017 年 2 月 24 日
消灭零回复
diangdiang
2017 年 2 月 24 日
求各路大神指点,困惑很久了
diangdiang
2017 年 2 月 24 日
要不大家本地测试下,代码可以直接跑,谢谢各位大大
linbiaye
2017 年 2 月 24 日
你这有啥奇怪的,一两个 case 正确能保证所有 case 都正确?
midasplus
2017 年 2 月 24 日
打 cf 遇到过类似的...原因大概是一些函数忘记返回值或者某些变量忘记初始化之类的...
casparchen
2017 年 2 月 24 日
你的代码有问题。另外 [2,3] 不是 {{2},{3}} 而是 {{2,3}}.
你的代码转第四次的时候回到了 2 ,所以最后多了个 2
hxndg
2017 年 2 月 24 日
额。。。还有一种情况就是解法是一次性的,改变了测试样例(比方说二叉树)的结构,那么也会出现这种问题,不过有的 oj 会报 runtime error 然后就什么都没有了
@111qqz
diangdiang
2017 年 2 月 24 日
@casparchen 多谢,我的锅
virusdefender
2017 年 2 月 24 日
这再正常不过了, oj 比你的 case 更全
midasplus
2017 年 2 月 24 日
@hxndg 嗯, leetcode 貌似这样是会 RE 的
jedihy
2017 年 2 月 26 日
这种写法最后返回结果要返回结果里面的前 0 到 n-1 个,不然会多几个,因为你的 while loop 是做完四次再判断。最后一次 loop ,多算一行或者一列。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX