將數字變成 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 。
示例 2:
輸入:num = 8
輸出:4
解釋:
步驟 1) 8 是偶數,除以 2 得到 4 。
步驟 2) 4 是偶數,除以 2 得到 2 。
步驟 3) 2 是偶數,除以 2 得到 1 。
步驟 4) 1 是奇數,減 1 得到 0 。
示例 3:
輸入:num = 123
輸出:12
提示:
0 <= num <= 10^6
實現代碼:
package com.mtons.mblog.xxxx;
class Solution {
/**
* 輸入: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 。
*
* @param num
* @return
*/
public int numberOfSteps(int num) {
int count = 0;
while (num != 0) {
if (isOdd(num)) {
++count;
num = num - 1;
} else {
num = num / 2;
++count;
}
}
return count;
}
/**
* 是否爲奇數
* true:奇數
*
* @param num
* @return
*/
public boolean isOdd(int num) {
if (num % 2 == 0) {
return false;
}
return true;
}
}