当前位置: 首页 > news >正文

[LeetCode]-Pascal's Triangle III 杨辉三角问题

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]
]
思路很简单,下面一层的值(除首尾外)都是前一层肩上两值的和。cur[j]=pre[j-1]+pre[j]。

class Solution {
public:
    vector<vector<int> > generate(int numRows) {
        vector<vector<int> > ret;
        if(numRows<1)return ret;
        
        ret.push_back(vector<int>{1});
        generate(numRows,1,ret);
        return ret;
}
private:
    void generate(int numRows,int n,vector<vector<int> > &ret){
            if(n==numRows){
                return;
            }

            vector<int> pre=ret.back();
            vector<int> cur;
            int m=pre.size();
            cur.push_back(1);
            for(int i=1;i<m;i++){
                cur.push_back(pre[i-1]+pre[i]);
            }
            cur.push_back(1);
            ret.push_back(cur);
            generate(numRows,n+1,ret);
        
        }
};


Pascal'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]-Unique Paths 矩阵中求两点间所有路线条数 滚动数组的用法类似。但是需要多记录一个“旧变量值”。

   

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> cur(rowIndex+1,1);   
        for(int i=1;i<=rowIndex;i++){
            int temp=1;  //存上一层的j-1值
            for(int j=1;j<i;j++){
                //cur[j]表示上一层cur[j]
                //temp 表示上一层的cur[j-1]
                int old=cur[j];
                cur[j]=temp+cur[j];
                temp=old;
            }
        }

        return cur;
    }
};

相关文章:

  • 令狐冲和TCP/IP协议的第三层协议的关系
  • [LeetCode]-Spiral Matrix III 螺旋矩阵
  • 蓝牙3.0+HS规范正式公布 携手802.11大提速
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算
  • 浏览器之父卷土重来 开发新浏览RockMelt
  • Singleton Pattern 单例模式
  • 浏览器也能当操作系统!——3款中文浏览器操作系统体验评测
  • Linux进程管理中的hash
  • 浏览器真的能“永不假死”?——六款主流浏览器防假死功能测试
  • [九度—剑指offer]—二维数组查找
  • 人人都能当“苍天哥” 手把手教你制作游戏视频
  • Linux 2.6 中导出sys_call_table表修改系统调用函数
  • [九度 1510 剑指offer]—替换空格 数组插入逆向移动
  • 个人设置随身携带口袋操作系统手到擒来
  • 免费邮箱,谁更可靠?6款常用免费邮箱收信效果对比测试
  • [LeetCode] Wiggle Sort
  • JAVA SE 6 GC调优笔记
  • java8-模拟hadoop
  • javascript 总结(常用工具类的封装)
  • java中具有继承关系的类及其对象初始化顺序
  • js中的正则表达式入门
  • log4j2输出到kafka
  • magento2项目上线注意事项
  • Python进阶细节
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 给Prometheus造假数据的方法
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 解析带emoji和链接的聊天系统消息
  • 老板让我十分钟上手nx-admin
  • 浏览器缓存机制分析
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 排序算法学习笔记
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何利用MongoDB打造TOP榜小程序
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 提醒我喝水chrome插件开发指南
  • 鱼骨图 - 如何绘制?
  • 进程与线程(三)——进程/线程间通信
  • ​香农与信息论三大定律
  • (阿里云万网)-域名注册购买实名流程
  • (差分)胡桃爱原石
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (一)插入排序
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Oracle存储过程编写经验和优化措施
  • (转)树状数组
  • (转)项目管理杂谈-我所期望的新人
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core控制台应用程序初识
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET企业级应用架构设计系列之应用服务器