3750. 最少反转次数得到翻转二进制字符串
题目描述
给你一个 正 整数 n。
令 s 为 n 的 二进制表示(不含前导零)。
二进制字符串 s 的 反转 是指将 s 中的字符按相反顺序排列得到的字符串。
你可以翻转 s 中的任意一位(将 0 → 1 或 1 → 0)。每次翻转 仅 影响一位。
请返回使 s 等于其原始形式的反转所需的 最少 翻转次数。
示例 1:
输入: n = 7
输出: 0
解释:
7 的二进制表示为 "111"。其反转也是 "111",两者相同。因此,不需要翻转。
示例 2:
输入: n = 10
输出: 4
解释:
10 的二进制表示为 "1010"。其反转为 "0101"。必须翻转所有四位才能使它们相等。因此,所需的最少翻转次数为 4。
提示:
1 <= n <= 109
解法
方法一:模拟
我们首先将整数 \(n\) 转换成二进制字符串 \(s\),然后我们使用双指针分别从字符串的两端向中间遍历,统计对应位置字符不同的个数 \(cnt\)。由于每次翻转只能影响一位,因此总的翻转次数为 \(cnt \times 2\)。
时间复杂度 \(O(\log n)\),空间复杂度 \(O(\log n)\),其中 \(n\) 是输入的整数。
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |