LeetCode java day7
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
嗨嗨。。。由于感觉力扣新手村有点哈人,就先来跟着英雄哥的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
给你一个非负整数 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,原理倒是懂了点,但是感觉代码会死人。。。。