119. Pascal's Triangle II

一、题目

  1、审题

  

  2、分析

    输出杨辉三角的第 n 行,其中行号从 0 开始。

 

 二、解答

  1、思路: 

    方法一、

      直接在一个 List 中计算杨辉三角的每一行。

      采用一个 for 循环,每次循环一次就,向 List 头部添加一个元素 1,且 从下标 1 开始,每个元素值变为 val(i) + val(i +1) 。

      即为第 n 行元素值。

    public List<Integer> getRow(int rowIndex) {
        
        List<Integer> resultList = new ArrayList<>();
        
        for (int i = 0; i <= rowIndex; i++) {
            resultList.add(0, 1);
            for(int j = 1; j < resultList.size() - 1; j++) 
                resultList.set(j, resultList.get(j) + resultList.get(j+1));
        }
        
        return resultList;
    }

  

  优化:

    每次向 List 尾部添加元素 1(操作更快)

    public List<Integer> getRow2(int rowIndex) {
        
        List<Integer> resultList = new ArrayList<>(rowIndex + 1);
        for (int i = 0; i <= rowIndex; i++) {
            resultList.add(1);
            for (int j = i - 1; j > 0; j--) 
                resultList.set(j, resultList.get(j) + resultList.get(j - 1));
        }
        return resultList;
    }

 

  方法二、

    采用数组进行杨辉三角的行的计算,数组的下标计算更为方便、简介,且操作数值更快,最终转为 List 即可。

    public List<Integer> getRow(int rowIndex) {
        
        Integer[] arr = new Integer[rowIndex+1];
        Arrays.fill(arr, 0);    // 填充 0, 否则空指针异常
        arr[0] = 1;
        
        for (int i = 1; i <= rowIndex; i++) {
            for (int j = i; j > 0; j--) 
                arr[j] = arr[j] + arr[j-1]; 
        }
        
        return Arrays.asList(arr);
    }

 

posted @ 2018-10-05 22:03  skillking2  阅读(103)  评论(0编辑  收藏  举报