一、今日刷题
第一部分:数组 – 第118题
跳转LeetCode
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
答案代码:
每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n 行的第 i 个数等于第 n - 1 行的第 i - 1 个数和第 i 个数之和 做题时就是这个数学关系(上一行的左右两个数字等效为i - 1, i)没找到,并且对于List的get()方法不熟悉。
import java.util.ArrayList;
import java.util.List;
/**118.杨辉三角:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
* @date 2022年01月20日 09:24
*/
public class Generate {
public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
list = generate(5);
for (List<Integer> list1 : list) {
System.out.println(list1);
}
}
public static List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
List<Integer> row = new ArrayList<>();
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
row.add(1);
} else {
int firstAdd = result.get(i - 1).get(j - 1);
int secondAdd = result.get(i - 1).get(j);
row.add(firstAdd + secondAdd);
}
}
result.add(row);
}
return result;
}
}
二、知识积累:
1.for循环中的 i++ 与 ++i:
先上结论:二者对于循环结果的影响并无区别,不过在运行时间上,++i使用的执行时间更短。
①for (int i=0; i<10; i++):
for(int i = 0; i<10; i++) {
System.out.println(i);
}
等价于:
for(int i=0; i<10;)
{
System.out.println(i);
i++;
}
②for (int i=0; i<10; ++i):
for(int i = 0; i<10; ++i) {
System.out.println(i);
}
等价于:
for(int i=0; i<10;)
{
System.out.println(i);
++i;
}
打印出的结果相同