zoukankan      html  css  js  c++  java
  • 领扣——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];
      
    
      }

    【总结】

    优化代码是必要的

  • 相关阅读:
    开源项目记录
    Linux的磁盘分区(一)
    Linux下的用户权限
    HeapSort 堆排序
    git参考手册
    SGU 分类
    20130704
    七月三日

    20130629
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/15058686.html
Copyright © 2011-2022 走看看