Example 4
将数字变成 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
解题思路:定义变量记录操作次数,根据奇数/偶数的不同,执行不同的操作,每次执行操作后,操作次数变量自加一。
解题步骤:
1. 定义变量operateTime记录操作次数
2. 定义while循环,num不为0时执行循环,在循环中判断num是否为偶数,若是则将其除以2,否则为奇数,将其自减一,执行结束后操作次数自加一,继续判断循环。
3. num等于0时循环结束,此时将操作次数返回。
示例代码如下:
public class BecomZeroTime { /** * 给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。 * <p> * 示例 1: * <p> * 输入: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: * <p> * 输入:num = 8 * 输出:4 * 解释: * 步骤 1) 8 是偶数,除以 2 得到 4 。 * 步骤 2) 4 是偶数,除以 2 得到 2 。 * 步骤 3) 2 是偶数,除以 2 得到 1 。 * 步骤 4) 1 是奇数,减 1 得到 0 。 * 示例 3: * <p> * 输入:num = 123 * 输出:12 * <p> * 来源:力扣(LeetCode) * 链接:https://leetcode.cn/problems/number-of-steps-to-reduce-a-number-to-zero */ public static void main(String[] args) { BecomZeroTime bzt = new BecomZeroTime(); System.out.println(bzt.numberOfSteps(123)); // 12 } /** * 个人 * @param num * @return */ public int numberOfSteps(int num) { int operateTime = 0; while (num != 0) { if (num % 2 == 0) num = num / 2; else num -= 1; operateTime++; } return operateTime; } /** * 官方 * * @param num * @return */ /* public int numberOfSteps(int num) { int ret = 0; while (num > 0) { ret += (num > 1 ? 1 : 0) + (num & 0x01); num >>= 1; } return ret; }*/ }