一. 问题描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
二. 解题思路
本题四路:采用递归的方法进行求解。
步骤一:构建递归函数(全局列表list存储结果,局部变量data存储某一层的结果,number表示第几层,tacket表示总层数)
步骤二:递归函数中,如果number>tacket则递归结束,否则构建临时列表newdata,根据杨辉三角的特性,将newdata的第2位到number-1位依次添加data中存储的相邻两数之和,然后将第一位和最后一位添加1。重复步骤二进行递归。
步骤三:直到如果number>tacket则递归结束。返回list。
三. 执行结果
执行用时 :1 ms, 在所有 java 提交中击败了98.50%的用户
内存消耗 :34 MB, 在所有 java 提交中击败了26.10%的用户
四. Java代码
classSolution {public List> generate(intnumRows) {
List> list=new ArrayList>();if(numRows==0) {returnlist;
}
List data=new ArrayList();
data.add(1);
list.add(data);if(numRows==1) {returnlist;
}else{
getRow(list,data,2,numRows);returnlist;
}
}public void getRow(List> list,List data,int number,inttacket) {if(number>tacket) {return;
}
List newdata=new ArrayList();for(int i=0;i
newdata.add(1);
}else{int temp=data.get(i-1)+data.get(i);
newdata.add(temp);
}
}
list.add(newdata);
getRow(list,newdata,number+1,tacket);
}
}