提问者:小点点

加法溢出变量


我在做Leetcode问题。 我已经理解了逻辑,但对整数值溢出有一点怀疑

下面是我的代码:

vector<vector<int>> generate(int numRows) 
{
   int size;
   vector<vector<int>>re;
   vector<int> a;
   vector<int> b;
   a.push_back(1);
   re.push_back(a);
   numRows--;
   while(numRows--)
   {
       b.push_back(1);
       size=a.size();
       size++;
       for(int i=1;i<size-1;i++)
       {
           b.push_back(a[i]+a[i-1]); //  <------ It is showing interger overflow at this 
       }
       b.push_back(1);
       re.push_back(b);
       a=b;
       b.clear();
   }
   return re;
}

下面是运行良好的代码:

vector<vector<int>> generate(int numRows) {
    vector<vector<int>> r(numRows);

    for (int i = 0; i < numRows; i++) {
        r[i].resize(i + 1);
        r[i][0] = r[i][i] = 1;

        for (int j = 1; j < i; j++) {
            r[i][j] = r[i - 1][j - 1] + r[i - 1][j]; //  <- Doing same addition but not facing any interger overflow issue ?
        }
    }
    
    return r;
}

我想知道上面的代码在相同的测试用例上不会面临整数溢出。


共1个答案

匿名用户

我不确定测试用例是什么,但是对于输入numrows=0,您将遇到无限的while循环,这可能是整数溢出的原因,请尝试

 while(numRows>0)
 

当您试图存储的值大于可以存储在整数中的最大值时,就会发生整数溢出

相关问题