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


  • 相关阅读:
    python爬虫简单代码爬取郭德纲单口相声
    WordPress 新版本中编辑器不好用, 使用原有编辑器
    hexo博客更新主题后上传Git操作
    Flask的Context(上下文)学习笔记
    Flask 中的 特殊装饰器before_request/after_request
    Flask 中的 CBV 与上传文件
    Flask 中的蓝图(BluePrint)
    【openresty】获取post请求数据FormInputNginxModule模块
    【随笔】Linux服务器备份相关
    【WMware】关于VMware服务器虚拟化管理之服务器容量扩充
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6700831.html
Copyright © 2011-2022 走看看