,敢教日月换新天。为有牺牲多壮志

[Swift]LeetCode70. 爬楼梯 | Climbing Stairs

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9697979.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

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

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

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

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

8ms
复制代码
 1 class Solution {
 2     func climbStairs(_ n: Int) -> Int {
 3         //动态规划
 4         //把运算的结果保存下来
 5         //下一次运算时直接调用
 6         if n==1 || n==2 {return n}
 7         //创建一个特定大小的数组
 8         //并将其所有值设置为相同的默认值
 9         var arr:[Int] = Array(repeating: 0 , count: n+1)
10         //斐波那契数列
11         //递归方式会时很多运算时重复,导致运算时间超时
12         arr[1] = 1
13         arr[2] = 2
14         for i in 3...n
15         {
16             arr[i] =  arr[i-1] + arr[i-2]
17         }
18         return arr[n] 
19     }
20 }
复制代码

不需要用数组存下所有的数据:8ms

复制代码
 1 class Solution {
 2     func climbStairs(_ n: Int) -> Int {
 3         if n < 3 {
 4             return n
 5         }
 6         
 7         var a = 1
 8         var b = 2
 9         var res = 0
10         
11         for _ in 2..<n {
12             res = a + b
13             a = b
14             b = res
15         }
16         
17         return res
18     }
19 }
复制代码

12ms(与法1只存储方式不同)

复制代码
 1 class Solution {
 2     func climbStairs(_ n: Int) -> Int 
 3     {
 4     guard n != 1 else { return 1 }
 5 
 6     var stairCount = [Int]()
 7     stairCount.insert(0, at: 0)
 8     stairCount.insert(1, at: 1)
 9     stairCount.insert(2, at: 2)
10     if n > 2 
11         {
12             for i in 3...n 
13             {
14                 stairCount.append(stairCount[i - 1] + stairCount[i - 2])
15             }
16         }
17         return stairCount[n]
18     }
19 }
复制代码

8ms

复制代码
 1 class Solution {
 2     func climbStairs(_ n: Int) -> Int {
 3         if n <= 2{
 4             return n
 5         }
 6         var a = 1
 7         var b = 2
 8         var res = 2
 9         for i in 2..<n {
10             res = a + res
11             a = b
12             b = res
13         }
14         return res
15     }
16 }
复制代码

 8ms

复制代码
 1 class Solution {
 2   func climbStairs(_ n: Int) -> Int {
 3     var result = 0
 4     var n1 = 3
 5     var n2 = 2
 6     
 7     if n <= 3 {
 8       result = n
 9     } else {
10       for _ in 3..<n {
11         result = n1 + n2
12         n2 = n1
13         n1 = result
14       }
15     }
16     
17     return result
18   }
19 }
复制代码

12ms

复制代码
 1 class Solution {
 2     func climbStairs(_ n: Int) -> Int {
 3         if(n < 2){return 1}
 4         var memo = [Int]()
 5         memo.append(1)
 6         memo.append(1)
 7         for i in 2...n{memo.append(memo[i-1] + memo[i-2])}
 8         return memo.last ?? memo[0]
 9     }
10 }
复制代码

24ms

复制代码
 1 //  问题分析:动态规划,f[i]表示第i阶的方法数,f[i] = f[i - 1] + 1 + f[i - 2] + 1
 2 
 3 class Solution {
 4     func climbStairs(_ n: Int) -> Int {
 5         var f: [Int] = []
 6         f.append(1)
 7         for i in 1...n {
 8             var one = f[i - 1]
 9             var two = 0
10             if (i - 2 < 0) {
11                 two = 0
12             } else {
13                 two = f[i - 2]
14             }
15             f.append(one + two)
16         }
17         return f[n]
18     }
19 }
复制代码

 

posted @   为敢技术  阅读(429)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
哥伦布
09:09发布
哥伦布
09:09发布
3°
多云
东南风
3级
空气质量
相对湿度
47%
今天
中雨
3°/15°
周三
中雨
3°/13°
周四
小雪
-1°/6°