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