2015-11-24 39 views
-5

https://leetcode.com/problems/pascals-triangle/杨辉三角|本文给出了错误答案

class Solution { 
public: 
    vector<vector<int>> generate(int numRows) { 
     vector<vector<int>> ret; 
     for (int i=0; i<numRows; i++) { 
      vector<int> v; 
      if (i==0) { 
      v.push_back(1); 
      } else { 
       v.push_back(1) ; 
       for (int j=0; j<i; j++) { 
        v.push_back(ret[i-1][j] + ret[i-1][j+1]); 
       } 
      } 
      ret.push_back(v); 
     } 
     return ret; 
    } 
}; 

当我运行自定义测试用例:

Input: 3 
Output: [[1],[1,1],[1,2,1]] 
Expected: [[1],[1,1],[1,2,1]] 

但它不能接受。提交结果是错误的答案:

Input: 3 
Output: [[1],[1,32753],[1,32754,36704997]] 
Expected: [[1],[1,1],[1,2,1]] 

有人能告诉我什么是错?

+2

通过调试器运行它并**看**发生了什么。 –

+0

谢谢我重写我的代码,它被接受。 –

回答

1

i1会发生什么情况?

if (i==0) 
{...} 
else 
{ 
    v.push_back(ret[i-1][j] + ret[i-1][j+1]); 
} 

ret[0]中有一个元件,但ret[i-1][j+1]访问第二元件。它可能正在读取一些垃圾内存,并将计算关闭。

我会建议与1 S于两侧填充的三角形就像这样:

1 1 1 
1 1 1 1 
1 1 2 1 1 

这样的边缘不初始化内存中读取。