国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Climbing Stairs

2019-11-15 01:19:18
字體:
來源:轉載
供稿:網友
Climbing StairsClimbing Stairs

https://leetcode.com/PRoblems/climbing-stairs/

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?

算法描述

(1)這道題其實是一道fibonacci數列題。當n=1時,f(n)=1;當n=2時,f(n)=2(有1+1,2這兩種方式);當n>=3時,有f(n)=f(n-1)+f(n-2)(2)但是實現時如果直接使用遞歸,就會超時,所以這里使用循環(3)用f0來記錄f(n-2),用f1來記錄f(n-1),按照之前的公式f(n)=f(n-1)+f(n-2),即得f2=f0+f1;然后更新f0和f1,使得這兩個記錄都往前移動一位,即f0=f1,f1=f2;一共進行n-1次,返回f2

程序代碼
public class Solution {    public int climbStairs(int n) {        int f0 = 1;        int f1 = 1;        int f2 = n;                n--;        while (n-- > 0) {            f2 = f0 + f1;            f0 = f1;            f1 = f2;        }                return f2;    }}
算法2-尾遞歸

對于這道題,記得之前有本書提到過尾遞歸的思想,所以這里應用了一把尾遞歸,不過單就這道題看來,其實就跟循環的中心思想是一樣的,都是記錄做過的兩個狀態。

程序代碼2
public class Solution {    public int climbStairsTail(int n, int acc, int acc2) {        if (n == 0) {            return acc;        }                return climbStairsTail(n - 1, acc2, acc + acc2);    }        public int climbStairs(int n) {        if (n == 0 || n == 1) {            return n;        }                return climbStairsTail(n, 1, 1);    }}

上一篇:Java暗箱操作之for-each

下一篇:MD5

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建水县| 科尔| 夏津县| 桃园县| 金川县| 海伦市| 称多县| 芜湖县| 广东省| 秀山| 德庆县| 惠来县| 滁州市| 衡阳市| 东光县| 大化| 贵阳市| 钟山县| 浮梁县| 丹凤县| 木兰县| 谢通门县| 莱州市| 平昌县| 庆城县| 皮山县| 司法| 慈溪市| 阳谷县| 哈尔滨市| 敖汉旗| 临江市| 大连市| 如皋市| 勃利县| 铅山县| 柳江县| 祁阳县| 长宁县| 夹江县| 炉霍县|