118.杨辉三角

题目:[https://leetcode-cn.com/problems/pascals-triangle/description/]
思路:输入数字n,返回第1层到第n层第数列。通过观察,可以发现除了首项和末项为1以外,其余项目都等于相应上层项数家上的上层项数的前项数,即是:num[i][j]=num[i][j-1]+num[i-1][j-1]。只要根据规律计算其他项目,并加上首尾项目即可
代码:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> ans;
        vector<int> zero;
        zero.clear();//空容器边界控制
        for (int layer=0;layer!=numRows;++layer) {//构建第几层,此处layer从0开始,最大值为numRows-1,故不能等于numRows
            ans.push_back(zero);
            for (int i=0;i!=layer+1;++i) {//构建第几个元素,此次i从0开始,每行最多有layer个元素,故最大值为可以为layer,故不等于layer+1
                if (i==0||i==layer) {//排除首尾元素为1;
                    ans[layer].push_back(1);
                }
                else{//其他元素构建
                    ans[layer].push_back(ans[layer-1][i]+ans[layer-1][i-1]);
                }
            }
        }
        return ans;
    }
};

反思:1、循环的边界控制

posted @ 2018-09-14 00:17  Kipper  阅读(117)  评论(0)    收藏  举报