题目1:
leetcode118
给定一个正整数n,求n层帕斯卡三角形。
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
法一:
三角形的每一行的首尾都为1,中间的等于上一行的左边列数j-1加上j列。
var generate = function(numRows) {
var res=[];
for(var i=0;i<numRows;i++){
res.push([]);
}
for(var i=0;i<numRows;i++){
res[i][0]=res[i][i]=1;
}
for(var i=2;i<numRows;i++){
for(j=1;j<i;j++){
res[i][j]=res[i-1][j-1]+res[i-1][j];
}
}
return res;
};
法二:
递归,用递归方法写出一个计算出i行j列的帕斯卡值的函数,然后调用即可。
var generate = function(numRows) {
var res=[];
for(var i=0;i<numRows;i++){
res.push([]);
for(var j=0;j<=i;j++){
res[i].push(triangle(i,j))
}
}
function triangle(m,n){
if(n===0){return 1}
else if(m===n){return 1}
else{
return triangle(m-1,n-1)+triangle(m-1,n)
}
}
return res;
};
题目二:?
leetcode 119
给出整数k,返回第k层的帕斯卡三角值
k=3,发回[1,3,3,1],要求空间复杂度是O(k)
思路:由于要求空间复杂度是k,所以采用迭代的方式从后边往前边替换。
由于更新的一层比上一层多了一个数,所以上来直接把最后一个数置为1。再前边的等于前边的数的相加。
var getRow = function(rowIndex) {
var res=[];
res[0]=1;
for(var i=0;i<rowIndex+1;i++){
for(var j=i;j>=1;j--){
if(j===i){
res[j]=1;
}else{
res[j]+=res[j-1];
}
}
}
return res;
};
网友评论