“杨辉三角”代码实现
一、代码实现原理
一、对于”杨辉三角“这道算法题,个人认为最主要的是能够理解随着行数的增多,列数也在不断地累加,通过循环遍历出了能够进行动态扩容的数组,代码如下:
int[][] yanghui = new int[10][];
for (int i = 0; i < yanghui.length; i++) {
yanghui[i] = new int[i + 1];
}
也就是说,通过for循环对于行数的不断控制,使得列数不断的增加,实现动态改变数组的大小。
二、其次就是根据“杨辉三角”的特点,给所开辟的空间赋值:
for (int i = 0; i < yanghui.length; i++) {
for (int j = 0; j < yanghui[i].length; j++) {
yanghui[i][0] = yanghui[i][i] = 1;
if (i > 1 && j < i && j > 0) {
yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
}
}
}
此处因为三角的外围都是1,所以会首先赋值为1,而后再进行循环,由于第i行第j列的值是第i-1行第j列的值+第i行第j-1的值,依次赋值就可以了。
其他方法后期不断补充,希望能对大家有所帮助。
使用ArrayList实现杨辉三角数
public List<List<Integer>> generate(int numRows) {
//如果返回传入的numRows小于1,则返回一个空的ArrayList
if (numRows < 1) {
return new ArrayList<>();
}
//定义一个返回结果
List<List<Integer>> result = new ArrayList<>();
//当给出的列数只有一列时,应该进行初始化操作,将result结果集返回
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
result.add(firstRow);
if (numRows == 1) {
return result;
}
//当所给列数大于等于两列时
for (int row = 2; row <= numRows; row++) {
List<Integer> preRow = result.get(row - 1 - 1);//这里应该注意的是,我们的ArrayList的底层是通过数组实现的,
//所以元素从下标0开始计数,也是开始比较迷惑的一点
List<Integer> curRow = new ArrayList<>();
curRow.add(1);
//这里进行说明,第row行对应有row列,由于开头和末尾都是1,只需要循环row - 2次即可
for (int col = 2; col < row; col++) {
int curNum = preRow.get(col - 1 - 1) + preRow.get(col - 1);//这个对应的是这行数据是由上一行的前一个元素和对应的当前元素共同求和所得
curRow.add(curNum);
}
curRow.add(1);
result.add(curRow);
}
return result;
}
相关解释在代码中已经进行了注释说明。