https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero/
While循环
判断num不为0时 每次循环执行次数sum加一
判断num 为偶数则除以2 为奇数减1
一直执行到num=0 跳出循环 返回sum
class Solution {
public int numberOfSteps (int num) {
int count = 0; //用count来统计得到0的次数
while(num > 0){ //当num大于0循环继续
if(num%2 == 0){ / /如果对2取余为0
num /= 2; //num自初否则减减
}else{
num--;
}
count++;
}
return count; //返回count的值
}
}
//模拟步骤简单递归
class Solution {
public int numberOfSteps (int num) {
if (num == 0) { //如果num等于0直接返回
return 0;
}
return 1 + numberOfSteps(num % 2 == 0 ? num / 2 : num - 1); //num 对2取余是否等于0如果是自除否则减1
}
}
//n统计结合两者
class Solution {
public int numberOfSteps (int num) {
int n = 0;
while(num > 0) {
num = num % 2 == 0 ? num >> 1 : num - 1; //如果对2取余等于0则向右移动一位否则减一
n++;
}
return n;
}
}
//用位运算转换为2进制 二进制 遇见奇数末尾一变为0(及减一) 遇见偶数向右移一位 每次统计加一
class Solution {
public int numberOfSteps (int num) {
int count=0;
while(num!=0)
{
if(num%2==0)
{
num=num>>>1;
count++;
}
else
{
num--;
count++;
}
}
return count;
}
}