怎么做网站地图导航北京网站设计公司兴田德润怎么样
LC-杨辉三角
链接:https://leetcode.cn/problems/pascals-triangle/submissions/

上图就是一个杨辉三角,每个数等于他左上角的数与右上角的数之和。
 第一行就是一个1;第二行是两个1;第三行的2就是它肩膀上两个1之和,其余的类似。
 所以第n行的数据是根据它上一行的数据计算来的,也就是第n行数据是是由第n-1行数据计算来的。上面的图我们看不出规律,我们可以让数字靠一边,如下:
1  2  3  4  5  6 71                       n=1
1  1                    n=2
1  2  1                 n=3
1  3  3  1              n=4
1  4  6  4  1           n=5
1  5  10 10 5  1        n=6
1  6  15 20 15 6  1     n=7
 
靠一边之后,是一个n行n列的排列,下面我们来看下存在的一些规律。
 1.第一行等于1
 2.第一列都等于1
 3.每行最后一个都是1,也就是第n行第n列是1
最后我们需要找到任意位置的数字是多少的规律,比如我们想要知道第i行第j列的数字是多少。我们看第3行第2列的2是由第2行第1列的1和第2行第2列的1加起来;第5行第3列的6是由第4行的第2列和第4行的第3列3加起来,所以第i行第j列是由第i-1行第j-1列加上第i-1行第j列。
下面我们看下文字转成的代码:
    private int f(int i, int j) {//0 1//第一列或者第i行第i列:数字为1if (j == 0 || i == j) {return 1;}return f(i - 1, j - 1) + f(i - 1, j);}
 
下面是整个题目的代码:
    public List<List<Integer>> generate(int numRors) {List<List<Integer>> a = new ArrayList<List<Integer>>();for (int k = 0; k < numRors; k++) {List temp = new ArrayList();for (int l = 0; l <= k; l++) {temp.add(k, l));}a.add(temp);}return a;}private int f(int i, int j) {//第一列或者第i行第i列:数字为1if (j == 0 || i == j) {return 1;}return f(i - 1, j - 1) + f(i - 1, j);}
 
附:LC-杨辉三角-记忆版
