算法练习之杨辉三角,杨辉三角的第 k 行

1. 杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:
输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

java

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rs = new ArrayList<List<Integer>>();
        List<Integer> prior = null;
        for(int i=1;i<=numRows;i++){
            List<Integer> tmp = new ArrayList<>();
            for(int j=0;j<i;j++){
                if(j==0||j==i-1){
                    tmp.add(1);
                }else{
                    tmp.add(prior.get(j-1)+prior.get(j));
                }
            }
            rs.add(tmp);
            prior = tmp;
        }
        return rs;
    }
}

php

class Solution {

    /**
     * @param Integer $numRows
     * @return Integer[][]
     */
    function generate($numRows) {
        $rs = [];
        for($i=1;$i<=$numRows;$i++){
            $tmp = [];
            for($j=0;$j<$i;$j++){
                if($j==0||$j==$i-1){
                    array_push($tmp,1);
                }else{
                    array_push($tmp,$rs[$i-2][$j-1]+$rs[$i-2][$j]);
                }
            }
            array_push($rs,$tmp);
        }
        return $rs;
    }
}

2.杨辉三角的第 

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

示例:
输入: 3
输出: [1,3,3,1]

直接使用组合公式

C(n,i) = n!/(i!*(n-i)!)

则第(i+1)项是第i项的倍数=(n-i)/(i+1);

java

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> rs= new ArrayList<>();
        long  m = 1;
        for(int i=0;i<=rowIndex;i++){
            rs.add((int)m);
            m = m*(rowIndex-i)/(i+1);
        }
        return rs;
    }
}

注:

  m不能为int,会发生溢出

php

class Solution {

    /**
     * @param Integer $rowIndex
     * @return Integer[]
     */
    function getRow($rowIndex) {
        $m = 1;
        $rs = [];
        for($i=0;$i<=$rowIndex;$i++){
            array_push($rs,(int)$m);
            $m = $m*($rowIndex-$i)/($i+1);
        }
        return $rs;
    }
}

原文地址:https://www.cnblogs.com/baby123/p/10954695.html

时间: 2024-08-29 17:53:54

算法练习之杨辉三角,杨辉三角的第 k 行的相关文章

算法基础_递归_求杨辉三角第m行第n个数字

问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好): import java.util.Scanner; /** * 求杨辉三角第m层第n个数字 * @author Administrator * */ public class Demo05 { public static int f(int m,int n) { if(n==0)return 1

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

从第0行开始,输出第k行,传的参数为第几行,所以在方法中先将所传参数加1,然后将最后一行加入集合中返回. 代码如下: public static List<Integer> generateII(int row){ ++row; List<Integer> list = new ArrayList<Integer>(); int[][] arr = new int[row][row]; for(int j = 0;j<row;j++) { for(int k =

打印星星(倒三角,正三角,等腰三角,直角三角,菱形,空心菱形)

正方形:5行5列 public static void main(String[] args){ //外层表示打印行数 for(int i=1;i<=5;i++){ //内层表示每行打印的个数 for(int j=1;j<=5;j++){ sout("*"); } //打印五个就换行 sout(); } } 直角三角形 第一行一个星,第二行两个星,第三行三个星 ······以此确定个数与行数的关系 public static void main(String[] args)

算法题:找出一个数组中依次最大的k个元素

package arithmetic; import java.util.Arrays; /** * 找出一个数组中依次最大的k个元素 * @author SHI */ public class FindMaxFigure { public static void main(String[] args) { int[] a=new int[]{1,5,-1,8,0,2}; System.out.println(Arrays.toString(findBigFigure(a, 3))); } /*

【基础算法】排序-复杂排序之二(找出第K大的数)

切割的思想是高速排序最精髓的地方.每一次切割出来的元素K一个排在第K位,所以利用这样的思想我们至少知道3点 1. 被切割出来的元素K最后一定排在第K位. 2. 在K左边的元素一定比K小或者相等. 3. 在K右边的元素一定比K大或者相等. 所以我们能够通过这些性质定位到随意一个元素. 比方我们partition完一个数组后,得到A={5,3,4,2,6,8,10,12,11,9} A[K]=8,所以我们知道排好序后的A[5]=8, A[4]一定在8左边,A[6]一定在8右边 所以,我们一定知道8这

[算法]在单链表和双链表中删除倒数第k个结点

题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头走到尾,每移动一步,就让K值减一,当链表走到结尾时,如果K值大于0,说明不用调整链表,因为链表根本没有倒数第K个节点,此时将原链表直接返回即可:如果K值等于0,说明链表倒数第K个节点就是头结点,此时直接返回head.next,相当于删除了头结点.当K的值小于零时,再次从头结点开始走,每移动一步,就让

【LeetCode-面试算法经典-Java实现】【119-Pascal&#39;s Triangle II(帕斯卡三角形(杨辉三角)II)】

[119-Pascal's Triangle II(帕斯卡三角形(杨辉三角)II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra

算法:杨辉三角(Pascal&#39;s Triangle)

一.杨辉三角介绍 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形.巴斯卡三角形,是二项式系数的一种写法,形似三角形,在中国首现于南宋杨辉的<详解九章算法>得名,书中杨辉说明是引自贾宪的<释锁算书>,故又名贾宪三角形.在那之前,还有更早发现这个三角的波斯数学家和天文学家,但相关的内容没有以图文保存下来,所以中国的数学家对此研究有很大贡献. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 3

杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析

说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三角形中的一种几何排列.此处引用维基百科上的一张动态图以直观说明(原文链接http://zh.wikipedia.org/wiki/杨辉三角): 从上图可看出杨辉三角的几个显著特征: 1. 每行数值左右对称,且均为正整数. 2. 行数递增时,列数亦递增. 3. 除斜边上的1外,其余数值均等于其肩部两数