zoukankan      html  css  js  c++  java
  • Pascal's Triangle

    我用二项式解决了这个,其中溢出是用java的BigInteger解决的。但是看到大多数人是用定义解决的,计算量就不大,不会造成溢出

    leetcode:https://oj.leetcode.com/problems/pascals-triangle/

    Pascal's Triangle

    Given numRows, generate the first numRows of Pascal's triangle.

    For example, given numRows = 5,
    Return

    [
         [1],
        [1,1],
       [1,2,1],
      [1,3,3,1],
     [1,4,6,4,1]
    ]
     1 //这里的帕斯卡三角即杨辉三角
     2 //         1
     3 //       1   1
     4 //     1   2   1
     5 //   1   3   3   1
     6 //用定义处理
     7 //先将第一行1 put进去
     8 //后面每一行的生成用先put第一个1和最后一个1
     9 //中间的数字由下面的方法解决
    10 //先取出上一行的list,用i和j指向上一行的第一个和第二个元素,两个相加得到这行的元素,知道j到上一行的最后一个元素
    11 //将生成的list加入到集合中,生成最后的结果
    12 public class Solution {
    13     public List<List<Integer>> generate(int numRows) {
    14         List<List<Integer>> set = new ArrayList<List<Integer>>();
    15         if(0 == numRows){
    16             
    17         }
    18         else if(1 == numRows){//只求1行
    19             List<Integer> listRow = new ArrayList<Integer>();
    20             Integer element = new Integer(1);
    21             listRow.add(element);
    22             set.add(listRow);
    23             
    24         }
    25         else{//>=2行
    26             //先把第一行put进去
    27             List<Integer> listRow = new ArrayList<Integer>();
    28             Integer element = new Integer(1);
    29             listRow.add(element);
    30             set.add(listRow);
    31             //找出所有的行
    32             for(int n = 1; n < numRows; n++){
    33                 //取出前一行的List
    34                 List preRowList = set.get(n -1);
    35                 //申明这一行的List并将第一个元素1add进去
    36                 List<Integer> nowRowList = new ArrayList<Integer>();
    37                 nowRowList.add(new Integer(1));
    38                 //开始找出除第一个1和最后一个的所有元素, 由定义计算出来
    39                 for(int i = 0, j = 1; j < preRowList.size(); i++, j++){
    40                     Integer num_first = (Integer)preRowList.get(i);
    41                     Integer num_second = (Integer) preRowList.get(j);
    42                     nowRowList.add(new Integer(num_first + num_second));
    43                 }
    44                 //添加最后一个1
    45                 nowRowList.add(new Integer(1));
    46                 //添加到set集合中
    47                 set.add(nowRowList);
    48             }
    49         }
    50         
    51         return set;
    52     }    
    53 }
  • 相关阅读:
    【java 自动化测试】TestNg 介绍
    【java 自动化测试】第14章:持续集成
    【java 自动化】15章节:课程总结
    【性能测试】看了一个博客,总结一下
    【Dubbo】Dubbo 接口是什么? 与http 接口有什么区别?
    【jmeter】性能测试报告分析
    Netty 相关目录
    Netty 源码学习——EventLoop
    Netty 源码分析——ChannelPipeline
    Netty 源码学习——服务端流程分析
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4063178.html
Copyright © 2011-2022 走看看