码迷,mamicode.com
首页 > 其他好文 > 详细

119. Pascal's Triangle II

时间:2018-10-05 22:36:24      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:空指针   头部   class   span   计算   dex   triangle   result   题目   

一、题目

  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);
    }

 

119. Pascal's Triangle II

标签:空指针   头部   class   span   计算   dex   triangle   result   题目   

原文地址:https://www.cnblogs.com/skillking/p/9746065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!