zoukankan      html  css  js  c++  java
  • 1342. 将数字变成 0 的操作次数『简单』

    题目来源于力扣(LeetCode

    一、题目

    1342. 将数字变成 0 的操作次数

    题目相关标签:位运算

    提示:

    0 <= num <= 10^6

    二、解题思路

    2.1 位运算方式

    1. 找规律:数字的二进制形式中 (位数 + 1 的个数)- 1

      减 1 是因为最后一位二进制位 1 变成 0 后不需要再进行右移位的操作了,因为最后一位二进制位 1 变成 0 后,该数值已经为 0

    2.2 递归方式

    1. 根据题目提示来模拟实现

    2. 递归方式来用代码代替文字表达

    3. 为偶数时,除 2 操作

    4. 为奇数时,减 1 操作

    5. 最后为零时,返回零,结束递归

    三、代码实现

    3.1 位运算方式

    public static int numberOfSteps(int num) {
        if (num == 0) {
            return 0;
        }
        int count = 0;
        while (num > 0) {
            if ((num & 1) == 1) {
                // 位为 1 时需要加 1(步操作)
                count++;
            }
            num >>= 1;
            // 右移位时需要加 1(步操作)
            count++;
        }
        // 因为最后只剩 1 位时,从 1 变成 0 只需 1 次,而无需再进行一次移位操作了
        return count - 1;
    }
    

    3.2 递归方式

    public static int numberOfSteps(int num) {
        if (num == 0) {
            return 0;
        }
        if (num % 2 == 1) {
            // 为奇数时,减 1 操作
            return 1 + numberOfSteps(num - 1);
        } else {
            // 为偶数时,除 2 操作
            return 1 + numberOfSteps(num / 2);
        }
    }
    

    四、执行用时

    4.1 位运算方式

    4.2 递归方式

    五、部分测试用例

    public static void main(String[] args) {
    //        int num = 14;  // output:6
    //        int num = 8;  // output:4
        int num = 123;  // output:12
    //        int num = 0;  // output:0
    //        int num = 1;  // output:1
            int result = numberOfSteps(num);
        System.out.println(result);
    }
    
  • 相关阅读:
    接口类和抽象类
    生成器和迭代器
    装饰器
    KMP算法(java,c++)
    java EE
    XML
    SQL语法
    单元测试
    JDBC
    SpringCloud
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12873353.html
Copyright © 2011-2022 走看看