LeetCode java day7

LeetCode java day7

**70. 爬楼梯**

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

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


嗨嗨。。。由于感觉力扣新手村有点哈人,就先来跟着英雄哥的dp路线做一做

 class Solution {
 public int climbStairs(int n) {
          
        int[]f=new int[100];
        f[0]=f[1]=1;
          for (int i = 2; i <=n ; i++) {
              f[i]=f[i-1]+f[i-2];
          }
          return f[n];
        }
    }

利用一个f数组当作一个记忆数组,将每个n阶需要的方法数量记录下来。

这样后续就可以减少重复计算了,算是空间换时间的经典了??hhh


**1342. 将数字变成 0 的操作次数**

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

示例 1:

输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
class Solution {
    static int []dp=new int[1000001];
    public int numberOfSteps(int num) {
        dp[0]=0;
        dp[1]=1;
        for (int i = 2; i <= num ; i++) {
            if(i%2==0){
                dp[i]=dp[i/2]+1;
            }
            else
            {
                dp[i]=dp[i-1]+1;
            }
        }
        return dp[num];

    }
}

emmm,这个题用动态规划,直接又丢时间又丢空间,毕竟数据是10^6量级

class Solution {
    public int numberOfSteps(int num) {
        int sum=0;
        while(num!=0){
            sum++;
            if(num%2==0){
                num/=2;
            }
            else {
                num-=1;
            }
        }
        return sum;
    }
}

虽然用大一入门就能写的代码,这个题快多了,不过毕竟咱是来搞dp的

先到这里,今天去看看ssm或者go去了,今天数据结构平衡二叉树有点emo,原理倒是懂了点,但是感觉代码会死人。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值