领扣——272 · 爬楼梯 II

【分析题目】

一个小孩爬一个 n 层台阶的楼梯。他可以每次跳 1 步, 2 步 或者 3 步。实现一个方法来统计总共有多少种不同的方式爬到最顶层的台阶。

【解题思路】

【动态规划】

自己写的

public int climbStairs2(int n) {
		if (n == 0)
			return 1;
		else if (n == 1)
			return 1;
		else if (n == 2)
			return 2;
		int[] f = new int[n + 1];
		f[0] = 1;
		f[1] = 1;
		f[2] = 2;
		for (int i = 3; i <= n; i++) {
			f[i] = f[i - 1] + f[i - 2] + f[i - 3];
		}
		return f[n];
	}
感觉学到一个技能是:每次创建动态数组的时候扩展的时候,都得考虑和它有关的变量。

时间复杂度:o(logN)
官方

 int[] f = new int[n+1];
        f[0] = 1;
        for (int i = 0; i <= n; i++) 
            for (int j = 1; j <= 3; j++) {
                if (i >= j) {
                    f[i] += f[i-j];
                }
            }
        return f[n];
  

  }

【总结】

优化代码是必要的

posted @ 2021-07-25 19:06  zhustarstar  阅读(31)  评论(0编辑  收藏  举报