Pascal's Triangle I,II

题目来自于Leetcode

https://leetcode.com/problems/pascals-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]
]
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int> >res;
        for(int i=0;i<numRows;i++)
        {
            vector<int>vec(i+1,1);
            if(i>1)
                for(int j=1;j<i;j++)
                    vec[j]=res[i-1][j-1]+res[i-1][j];
            res.push_back(vec);
            vector<int>().swap(vec);
        }
        return res;
    }
};

Pascal‘s Triangle II

Total Accepted: 42320 Total
Submissions: 143760

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 space?

此处有内存要求尽管採用第一种方法能够ac可是明显不符合要求

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<vector<int> >res;
        for(int i=0;i<rowIndex+1;i++)
        {
            vector<int>vec(i+1,1);
            if(i>1)
                for(int j=1;j<i;j++)
                    vec[j]=res[i-1][j-1]+res[i-1][j];
            res.push_back(vec);
            vector<int>().swap(vec);
        }
        return res[rowIndex];

    }
};

我们必须又一次设计算法。

第一想到的就是pascal三角形的系数会等于N行i列的值等于

( r

     n )

可是

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int>res(rowIndex+1,1);
        if(rowIndex<2)
        return res;
       long long nth=1;
         for(int i=1;i<rowIndex+1;i++)
            nth*=i;
         long long rth=1,n_rth=nth;
        for(int i=1;i<rowIndex;i++)
        {

            n_rth/=(rowIndex-i+1);
            res[i]=nth/rth/n_rth;
                        rth*=(i+1);
        }
        return res;
    }
};

用来存储二项式系数的值非常easy在rowIndex=24时候就报错了

最后一种也就是正确的方法是利用分配的空间来计算的详细给出了k=5的详细描写叙述

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int>res(rowIndex+1,1);
        if(rowIndex<2)
        return res;
        int t1,t2;
   for(int i=2;i<=rowIndex;i++)
    {
        t1=res[0];
        t2=res[1];
        for(int j=1;j<i+1;j++)
        {
            res[j]=t1+t2;
            t1=t2;
            t2=res[j+1];
        }
        res[i]=1;
    }
        return res;
    }
};

My Submissions

Question
 Solution

Pascal's Triangle I,II

时间: 2024-10-31 02:17:55

Pascal&#39;s Triangle I,II的相关文章

Pascal&#39;s Triangle I,II

题目来自于Leetcode https://leetcode.com/problems/pascals-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] ] class Solution { public: vector<vecto

[LeetCode]Pascal&amp;#39;s Triangle II

题目:给定一个行索引index,返回帕斯卡三角形第index层的三角形 算法:生成index层帕斯卡三角形,并返回第index层三角形 public class Solution { public List<Integer> getRow(int rowIndex) { if (rowIndex < 0) { return null; } List<List<Integer>> pascalTriangle = new ArrayList<List<I

【Leetcode】Pascal&amp;#39;s Triangle II

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 space? 思路:最简单的方法就是依照[Leetcode]Pascal's Triangle 的方式自顶向下依次求解,但会造成空间的浪费.若仅仅用一个vect

LeetCode 119:Pascal&amp;#39;s Triangle II

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. 题目要求计算杨辉三角某一行的元素.这个也是二项式系数的计算问题. class Solution { public: vector<int> getRow(int rowIndex) { vector<int> result; vector<int> tmp;

Pascal&amp;#39;s Triangle II

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 space? Hide Tags Array vector<int> getRow(int rowIndex) { vector<int> res

leetcode:Pascal&amp;#39;s Triangle

一.     题目 经典题目,杨辉三角,输入行数.生成杨辉三角的数组. 二.     分析 首先,我们知道有例如以下规律: 1.每一行的第一个数和最后一个数都为1 2.中间的数是上面数和上面数左边的数的和值 须要注意的是,当行数为0时输出[[1]] 结果为一个二维数组,所以不难想到解决方式. 每层保存前一行的指针,然后当前行数据依据上一行来得到,每一个元素就是上一行两个相邻元素相加(第一个和最后一个元素是1). 算法时间复杂度应该是O(1+2+3+...+n)=O(n^2),空间上仅仅须要二维数

leetcode笔记:Pascal&amp;#39;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] ] 二. 题目分析 关于帕斯卡三角形的定义,可參考:http://baike.baidu.com/link?url=qk_-urYQnO4v6v3P4BuMtCa0tMNUqJUk

[LeetCode]Pascal&amp;#39;s Triangle

称号:定行数n,生成n帕斯卡三角行 算法:步骤通过阵列工序 public class Solution { public List<List<Integer>> generate(int numRows) { if (numRows < 0) { return null; } List<List<Integer>> pascalTriangle = new ArrayList<List<Integer>>(); for (int

LeetCode——Pascal&amp;#39;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] ] 原题链接:https://oj.leetcode.com/problems/pascals-triangle/ 题目 :给定n,生成n行的帕斯卡三角形. 思路:帕斯卡三角形 也就是 杨辉三角形,依据