博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cc++ LeetCode 爬楼梯
阅读量:3966 次
发布时间:2019-05-24

本文共 1073 字,大约阅读时间需要 3 分钟。

c/c++ LeetCode 爬楼梯

问题描述:

难度简单1164

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

**注意:**给定 n 是一个正整数;

解法一: 动态规划

状态转移方程 n == 1 dp[1] = 1;

​ n == 2 时 dp[2] = 2;

​ n == k 时 (k > 2) dp[k] = dp[k - 1] + dp[k - 2];

class Solution {public:    int climbStairs(int n) {        if (n == 1) return 1;        if (n == 2) return 2;        int* dp = new int[n + 1];        dp[1] = 1;        dp[2] = 2;                for (int i = 3; i <= n ; ++i) {            dp[i] = dp[i - 1] + dp[i - 2];        }        return dp[n];    }};

时空复杂度分析

时间复杂度: 从3 开始遍历到n 一遍所以为O(N);

空间复杂度: 用了一个长度为n + 1 数组保存所有的状态;为O (N);

解法二 : 迭代(最优解)

有些越简单的越实用,什么递归啊,动态规划呀,没啥用,递归时间复杂度太高

用三个变量交替赋值;

class Solution {public:    int climbStairs(int n) {        if (n == 1) return 1;        if (n == 2) return 2;        if (n == 3) return 3;        int left = 1;        int right = 2;        int sum = 0;        for (int i = 3 ;  i <= n; i++){            sum = left + right ;            left = right;            right = sum ;         }         return sum;    }};

时空复杂度分析

时间复杂度: 从3 开始遍历到n 一遍所以为O(N);

空间复杂度: 用了常数空间为O (1);

转载地址:http://qbyki.baihongyu.com/

你可能感兴趣的文章
解决Linux CentOS中cp -f 复制强制覆盖的命令无效的方法
查看>>
wdcpv3升级到v3.2后,多PHP版本共存的安装方法
查看>>
PHP统计当前网站的访问人数,访问信息,被多少次访问。
查看>>
Windows10远程报错CredSSP加密oracle修正
查看>>
Windows server 2016 设置多用户登陆
查看>>
偶然发现的面包屑
查看>>
CentOS 7 下挂载NTFS文件系统磁盘并设置开机自动挂载
查看>>
非插件实现Typecho语法高亮
查看>>
windows 下 netsh 实现 端口映射(端口转发)
查看>>
两个好用的命令行工具 watch 和 rsync
查看>>
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>
docker更换国内镜像
查看>>
CentOS 下 tree命令用法详解
查看>>
docker上传镜像至Registry时https报错解决方法
查看>>
docker下删除none的images
查看>>
Linux提权获取敏感信息方法
查看>>
Ubuntu 16.04开机A start job is running for Raise network interface(5min 4s)解决方法
查看>>
Ubuntu 16.04开机隐藏菜单缩短时间
查看>>
《Linux内核设计与实现》- Linux的进程
查看>>