• 118. 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,其他的元素分别等于上一层同位置元素加上前一个位置的元素。

    一百度,才知道,这就是大名鼎鼎的杨辉三角!只可惜,在欧洲,这个表叫做帕斯卡三角形

    但帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。

    布莱士·帕斯卡的著作Traité du triangle arithmétique(1655年)介绍了这个三角形。帕斯卡搜集了几个关于它的结果,并以此解决一些概率论上的问题,影响面广泛,Pierre Raymond de Montmort(1708年)和亚伯拉罕·棣·美弗(1730年)都用帕斯卡来称呼这个三角形。

    估计由于发现该规律后对数学界的影响吧,于是就成为了Pascal's Triangle.

    具体的数学定义还有很多,请自行百度。

    用java实现,根据规律,不是很复杂,但由于经验,还是折腾了好久,不过还算顺利:

        //Pascal's Triangle(杨辉三角),根据层数构建相应的杨辉三角
        public List<List<Integer>> generate(int numRows) {
            //创建元素为List<Integer>的链表list
            List<List<Integer>> list = new ArrayList<>();
            if (numRows<=0)
            {
                return list;
            }
            //构建一个元素构成的第一次,不依赖上一层
            List<Integer> list1 = new ArrayList<Integer>(1);
            list1.add(0, 1);
            list.add(list1);
            if (numRows==1)
            {
                return list;         
            }
            //每层递增,通过循环创建每层的链表,并计算元素值
            //由于链表不能根据任意序号插入元素,所以元素的插入还是按顺序来的
            for (int i = 2;i <= numRows; i++)
            {
                System.out.print("循环: "+i+" ");
                List<Integer> e = new ArrayList<Integer>(i);
                e.add(0,1);
                //从第三层开始,本次处两端元素为1,其余都根据上层相应元素求出
                if(i>2)
                {
                    for (int j = 1;j < i-1;j++)
                    {
                        System.out.print("i: "+i+"  "+"j: "+j+" ");
                        int num = list.get(i-2).get(j-1)+ list.get(i-2).get(j);
                        e.add(j, num);        
                    }
                }
                e.add(i-1,1);
                list.add(e);
            }
            return list;
        }
       

    完全按照定义实现,为了保障返回根据题目要求,返回List<List<Integer>>,所以直接用ArrayList。

    结果:

    同样代码提交了两次,一次4ms,一次5ms,不明觉厉。

    结果分布leetcode还没整出来,只能后面再看啦

    118. Pascal's Triangle

  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/yuanzhaoyi/p/5852989.html
Copyright © 2020-2023  润新知