題目
Given a non-negative integer num, return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.
Example 1:
Input: num = 14
Output: 6
Explanation:
Step 1) 14 is even; divide by 2 and obtain 7.
Step 2) 7 is odd; subtract 1 and obtain 6.
Step 3) 6 is even; divide by 2 and obtain 3.
Step 4) 3 is odd; subtract 1 and obtain 2.
Step 5) 2 is even; divide by 2 and obtain 1.
Step 6) 1 is odd; subtract 1 and obtain 0.
Example 2:
Input: num = 8
Output: 4
Explanation:
Step 1) 8 is even; divide by 2 and obtain 4.
Step 2) 4 is even; divide by 2 and obtain 2.
Step 3) 2 is even; divide by 2 and obtain 1.
Step 4) 1 is odd; subtract 1 and obtain 0.
Example 3:
Input: num = 123
Output: 12
Constraints:
0 <= num <= 10^6
分析
題意:給定一個非負整數,如果它是偶數,那就除以二,如果是奇數,那就減一,直到該數爲0;返回操作步數。
題目簡單易懂,直接上手。
解答
class Solution {
public int numberOfSteps (int num) {
int res=0;
while(num!=0){
if(num%2==0)
num/=2;
else
num-=1;
res++;
}
return res;
}
}
位運算(參考)
class Solution {
public int numberOfSteps (int num) {
int firstBitMask = 1;
int steps = 0;
while(num>0){
if((num & firstBitMask) >0){
num &= ~firstBitMask;
}else{
num = num >>1;
}
steps ++;
}
return steps;
}
}