118、119 pascal's triangle I、II---Array-LeetCode

来源:互联网 发布:微创软件 编辑:程序博客网 时间:2024/05/18 01:10

118 pascal's triangle I---Array-LeetCode

找规律 a = b + c。


class Solution {public:    vector<vector<int>> generate(int numRows)     {        vector<vector<int>> ret(numRows);           // 共有numRows层                for(int layer = 0; layer < numRows; ++layer)        {            ret[layer].resize(layer + 1);           // 每层有layer个元素            int sz = ret[layer].size();             // 同上                        ret[layer][0] = ret[layer][sz - 1] = 1; // 每层首尾为1                         for(int i = 1; i < sz - 1; ++i)         // 遍历每层(除去首尾元素)            {     //              if(layer >= 1)                      // 下标layer - 1不可能越界,因为第一行i<size - 1不成立                    ret[layer][i] = ret[layer - 1][i - 1] + ret[layer - 1][i];            }        }        return ret;    }};


119 pascal's triangle II---Array-LeetCode

只有o(k)空间,不能新建数组外的空间。

由于公式ret[i] = ret[i - 1] + ret[i]; 故每个数需要其前一个下标的值 与 自己下标的值共同计算得出
故为避免 前一个下标的值被覆盖(不是原值)(如由 121 会算出为1341),需要倒序遍历(结果为1331)。

class Solution {public:    vector<int> getRow(int rowIndex)     {        vector<int> ret(rowIndex + 1);        for(int layer = 0; layer < rowIndex + 1; ++layer)   // 0 1 2 3层        {            ret[0] = ret[layer] = 1;                        // 首尾元素为1            // 或者vector<int> ret(rowIndex + 1, 1);        // 全部元素都置1,由倒序遍历决定从倒数第几个数开始赋新值//          if(layer >= 1)                                  // 下标layer - 1 < 0 时,i >= 1不会成立,不需要下标越界判断//          {                for(int i = layer - 1; i >= 1; --i)         // 因为只有o(k)空间,从前向后的话值会被覆盖。                {                    ret[i] = ret[i - 1] + ret[i];                } //         }        }        return ret;    }};


0 0