Pascal's Triangle & Pascal's Triangle II

来源:互联网 发布:没见过如此敬业的淘宝 编辑:程序博客网 时间:2024/05/17 03:55

Pascal's Triangle

杨辉三角,或者叫帕斯卡三角(不确定是不是这么叫),给一个数,返回该数值的杨辉三角的二位数组。

我的思路:

1  题目不是很难,用两个一维数组和一个二维数组(二维是必须的,要返回数据,实际上可以只用一个一维的数组,后面讲解)。只要杨辉三角的构造分析清楚。每层的第一个数不变,下一层的数等于上一层对应位置的上一个和本身的和。用公式表示up表示上一层的数据,down表示下一层数据。

down[i] = up[i] + up[i - 1]

代码如下:

    vector<vector<int>>answer;    vector<int>    up, down;        if (numRows < 1)    return answer;    up.push_back(1);    answer.push_back(up);    if (numRows == 1)     return answer;        for (int i = 1; i < numRows; i++) {    for (int j = 0; j <= i; j++) {    if (j == 0 || j == i)    down.push_back(1);    else    down.push_back(up[j -1] + up[j]);    }    answer.push_back(down);    up = down;    down.clear();    }    return answer; 

Pascal's Triangle II

杨辉三角变形,给一个数,返回该层的数据。这里的层数从0开始。题目下面的优化目标是额外的数据空间是O(k)。

我的思路:

1  这里可以把上排和下排的数据写放在一个数组中,如果还是和上面一样,那么下排新的数据会把旧的数据覆盖,所以循环中从后面开始计数。

代码如下:

    for (int i = 1; i < rowIndex; i++) {    for (int j = i; j > 0; j--) {    if (j == i)    up.push_back(1);    else     up[j] = up[j -1] + up[j];    }    }

这里只贴出关键的代码,其他的和上题代码差别不大。


今天两题和数学公式有那么一些些联系,分析好数据变化情况,依照公式来编写代码,思维清晰



0 0
原创粉丝点击