一、问题描述
给定一个非负数num,请你返回他变0所需要的步数
二、问题分析
一个数可以分为两种情况:
1.当这个数组时偶数的时候:
设x=n/2;即x*2=n 也就是说,f(n)=f(n/2)+1["n可以由他的二分之一倍数乘以二得到"]
2.当这个数组时奇数的时候:
设x=n-1即x+1=n 也就是说,f(n)=f(n-1)+1l;["n可以由他前一个数字加以得到"]
三、代码实现
public static int numberOfStep(int n){
int max=1000001;
int[] f=new int[max];//这是一个状态数组
f[0]=0;
for (int i = 1; i < n; i++) {
if (i%2==0){
//这是一个偶数
f[i]=f[i/2]+1;
}else{
//这是一个奇数
f[i]=f[i-1]+1;
}
}
return f[n-1];
}