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

2017-02-24 20:32:37 +08:00
 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]
2280 次点击
所在节点    程序员
11 条回复
diangdiang
2017-02-24 20:34:19 +08:00
消灭零回复
diangdiang
2017-02-24 20:35:25 +08:00
求各路大神指点,困惑很久了
diangdiang
2017-02-24 20:38:24 +08:00
要不大家本地测试下,代码可以直接跑,谢谢各位大大
linbiaye
2017-02-24 20:39:34 +08:00
你这有啥奇怪的,一两个 case 正确能保证所有 case 都正确?
111qqz
2017-02-24 21:03:36 +08:00
打 cf 遇到过类似的...原因大概是一些函数忘记返回值或者某些变量忘记初始化之类的...
casparchen
2017-02-24 21:06:00 +08:00
你的代码有问题。另外 [2,3] 不是 {{2},{3}} 而是 {{2,3}}.
你的代码转第四次的时候回到了 2 ,所以最后多了个 2
hxndg
2017-02-24 21:14:02 +08:00
额。。。还有一种情况就是解法是一次性的,改变了测试样例(比方说二叉树)的结构,那么也会出现这种问题,不过有的 oj 会报 runtime error 然后就什么都没有了
@111qqz
diangdiang
2017-02-24 21:22:27 +08:00
@casparchen 多谢,我的锅
virusdefender
2017-02-24 22:43:36 +08:00
这再正常不过了, oj 比你的 case 更全
111qqz
2017-02-24 22:48:48 +08:00
@hxndg 嗯, leetcode 貌似这样是会 RE 的
jedihy
2017-02-26 08:08:31 +08:00
这种写法最后返回结果要返回结果里面的前 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