mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
41 lines
2.2 KiB
HTML
41 lines
2.2 KiB
HTML
<p>一次 <strong>位翻转</strong> 定义为将数字 <code>x</code> 二进制中的一个位进行 <strong>翻转</strong> 操作,即将 <code>0</code> 变成 <code>1</code> ,或者将 <code>1</code> 变成 <code>0</code> 。</p>
|
||
|
||
<ul>
|
||
<li>比方说,<code>x = 7</code> ,二进制表示为 <code>111</code> ,我们可以选择任意一个位(包含没有显示的前导 0 )并进行翻转。比方说我们可以翻转最右边一位得到 <code>110</code> ,或者翻转右边起第二位得到 <code>101</code> ,或者翻转右边起第五位(这一位是前导 0 )得到 <code>10111</code> 等等。</li>
|
||
</ul>
|
||
|
||
<p>给你两个整数 <code>start</code> 和 <code>goal</code> ,请你返回将 <code>start</code> 转变成 <code>goal</code> 的 <strong>最少位翻转</strong> 次数。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>示例 1:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>start = 10, goal = 7
|
||
<b>输出:</b>3
|
||
<b>解释:</b>10 和 7 的二进制表示分别为 1010 和 0111 。我们可以通过 3 步将 10 转变成 7 :
|
||
- 翻转右边起第一位得到:101<strong><em>0</em></strong> -> 101<strong><em>1 。</em></strong>
|
||
- 翻转右边起第三位:1<strong><em>0</em></strong>11 -> 1<strong><em>1</em></strong>11 。
|
||
- 翻转右边起第四位:<strong><em>1</em></strong>111 -> <strong><em>0</em></strong>111 。
|
||
我们无法在 3 步内将 10 转变成 7 。所以我们返回 3 。</pre>
|
||
|
||
<p><strong>示例 2:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>start = 3, goal = 4
|
||
<b>输出:</b>3
|
||
<b>解释:</b>3 和 4 的二进制表示分别为 011 和 100 。我们可以通过 3 步将 3 转变成 4 :
|
||
- 翻转右边起第一位:01<strong><em>1</em></strong> -> 01<em><strong>0 </strong></em>。
|
||
- 翻转右边起第二位:0<strong><em>1</em></strong>0 -> 0<strong><em>0</em></strong>0 。
|
||
- 翻转右边起第三位:<strong><em>0</em></strong>00 -> <strong><em>1</em></strong>00 。
|
||
我们无法在 3 步内将 3 变成 4 。所以我们返回 3 。
|
||
</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>0 <= start, goal <= 10<sup>9</sup></code></li>
|
||
</ul>
|