现在的位置: 首页 > 综合 > 正文

Pascal’s Triangle & Pascal’s Triangle II

2018年04月12日 ⁄ 综合 ⁄ 共 843字 ⁄ 字号 评论关闭

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];
    		}
    	}

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

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

抱歉!评论已关闭.