美文网首页
1404. 将二进制表示减到 1 的步骤数

1404. 将二进制表示减到 1 的步骤数

作者: 程序员小2 | 来源:发表于2022-12-16 11:01 被阅读0次

题目:

给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:

如果当前数字为偶数,则将其除以 2 。

如果当前数字为奇数,则将其加上 1 。

题目保证你总是可以按上述规则将测试用例变为 1 。

示例 1:

输入:s = "1101"
输出:6
解释:"1101" 表示十进制数 13 。
Step 1) 13 是奇数,加 1 得到 14
Step 2) 14 是偶数,除 2 得到 7
Step 3) 7 是奇数,加 1 得到 8
Step 4) 8 是偶数,除 2 得到 4
Step 5) 4 是偶数,除 2 得到 2
Step 6) 2 是偶数,除 2 得到 1
示例 2:

输入:s = "10"
输出:1
解释:"10" 表示十进制数 2 。
Step 1) 2 是偶数,除 2 得到 1
示例 3:

输入:s = "1"
输出:0

提示:

1 <= s.length <= 500
s 由字符 '0' 或 '1' 组成。
s[0] == '1'

java代码:

class Solution {
    public int numSteps(String s) {
        int n = s.length();
        int ans = 0;
        // meet1 记录我们有没有遇见过字符 1
        boolean meet1 = false;
        // 从后向前遍历字符
        for (int i = n - 1; i >= 0; --i) {
            if (s.charAt(i) == '0') {
                // 如果当前字符为 0,分为两种情况
                // (1) 还没有遇见过字符 1,那么这个 0 是字符串低位的 0,需要一次除二操作
                // (2) 遇见过字符 1,那么这个 0 会因为它右侧的某次加一操作变为 1,因此它需要一次加一和一次除二操作
                ans += (meet1 ? 2 : 1);
            } else {
                // 如果当前字符为 1,分为两种情况
                // (1) 还没有遇见过字符 1,那么这个 1 需要一次加一和一次除二操作
                //     这里需要考虑一种特殊情况,就是这个 1 是字符串最左侧的 1,它并不需要任何操作
                // (2) 遇见过字符 1,那么这个 1 会因为它右侧的某次加一操作变为 0,因此它只需要一次除二操作
                if (!meet1) {
                    if (i != 0) {
                        ans += 2;
                    }
                    meet1 = true;
                } else {
                    ++ans;
                }
            }
        }
        return ans;
    }
}

相关文章

  • 第4周学习笔记

    1404. 将二进制表示减到 1 的步骤数 题目: 思路: 第一次解法(行不通,会超时):把二进制数通过Math....

  • 1404. 将二进制表示减到 1 的步骤数

    题目: 给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数: 如果当前数字为偶...

  • 将二进制表示减到 1 的步骤数

    题目: 给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数...

  • 二进制位运算---左移(<<)右移(>>

    (1).二进制中负数的计算 负数以正数的补码表示 原码:一个整数按照绝对值的大小转化成二进制的数 反码:将二进制数...

  • 原码 补码 leetcode 137 python注意点

    二进制表示 计算机使用二进制表示数字,加入使用8位二进制表示数字,每位取0或1,能表示2^8=256个数。 方案1...

  • <<剑指offer>>--javascript(9)-二进制数中

    二进制数中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码如下: 基本思...

  • 11:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路 n - 1 可以将最低位的1...

  • 剑指offer--11. 二进制中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 思路:二进制数每位挨个和 1 (左移后其实不...

  • 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 问题分析 每次n&(n-1)操作将消失...

  • 4 | 二进制 -如何表示数字

    如何用01 表示更多的数? 1 个二进制值可以表示1个数,把真和假 当做 1 和 0.像表示更多的东西 ,加位数 ...

网友评论

      本文标题:1404. 将二进制表示减到 1 的步骤数

      本文链接:https://www.haomeiwen.com/subject/mrmdqdtx.html