zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Matlab中transpose函数的使用
    Matlab中cell2mat的使用
    Matlab中find函数的使用
    Matlab中数组下标是logical,如何处理?
    Matlab中mat2cell的使用
    判断一棵树是否是另一棵树的子树
    链表中倒数第k个结点
    古德-图灵估计
    好书记录
    编程思路总结——递归
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6700831.html
Copyright © 2011-2022 走看看