杨辉三角

在线OJ网址https://leetcode-cn.com/problems/pascals-triangle/
杨辉三角我们都很了解了,现在我们要编写这么一个程序,例如在这里我们输入5
就会输出一个5行的杨辉三角如下

杨辉三角_第1张图片
这道题的思路我分为一下几个步骤

  1. 合法性判断,如果输入的行数小于0,返回一个空链表
  2. 第一行永远等于1,如果输入行数为1,则输出为1
  3. 第二行永远是两个1,如果输入行数为2,则输入,第一行的1和第二行的两个1
  4. 后续情况,第row行的元素个数也为row,即行数列数相等
  5. 第row行的第一个元素和最后一个元素都为1,中间元素为前一行的前一列加相同列

为了更好的理解,我们把整个结果当作一个大容器,每个大容器都有一个小容器,在这里就是我说的行,每个小容器都有几个元素(数字)就是我说的列

具体实现代码如下

class Solution {
    public List<List<Integer>> generate(int numRows) {
    	//1.合法性判断
        if(numRows < 0){
            return new ArrayList<>();
        }
        //创建大容器
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> firstLine = new ArrayList<>();
        firstLine.add(1);
        result.add(firstLine);
        //第一行只有一个1
        if(numRows == 1){
            return result;
        }
        //第二行只有两个1
        List<Integer> secondLine = new ArrayList<>();
        secondLine.add(1);
        secondLine.add(1);
        result.add(secondLine);
        if(numRows == 2){
            return result;
        }
        //后续情况,这里需要注意,row是行数和numrows对应,不是下标
        for (int row = 3; row <= numRows; row++) {
        	//获取到前一行,row-1是得到这一行的下标,在减一才是前一行
            List<Integer> prevLine = result.get(row - 1 -1);
            List<Integer> curLine = new ArrayList<>();
            curLine.add(1);
            //col=1是小容器下标为1的元素,所以前闭后开
            for (int col = 1; col < row - 1; col++) {
                curLine.add(prevLine.get(col - 1) + prevLine.get(col));
            }
            curLine.add(1);
            result.add(curLine);
        }
        return result;
    }
}

你可能感兴趣的:(LeetCode,javaSE,数据结构)