给你一个整数数组 nums。
对于每个元素 nums[i],你可以执行以下操作 任意 次(包括零次):
nums[i] 加 1,或者nums[i] 减 1。如果一个数的二进制表示(不包含前导零)正读和反读都一样,则称该数为 二进制回文数。
你的任务是返回一个整数数组 ans,其中 ans[i] 表示将 nums[i] 转换为 二进制回文数 所需的 最小 操作次数。
示例 1:
输入:nums = [1,2,4]
输出:[0,1,1]
解释:
一种最优的操作集合如下:
nums[i] |
nums[i] 的二进制 |
最近的 回文数 |
回文数的 二进制 |
所需操作 | ans[i] |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 已经是回文数 | 0 |
| 2 | 10 | 3 | 11 | 加 1 | 1 |
| 4 | 100 | 3 | 11 | 减 1 | 1 |
因此,ans = [0, 1, 1]。
示例 2:
输入:nums = [6,7,12]
输出:[1,0,3]
解释:
一种最优的操作集合如下:
nums[i] |
nums[i] 的二进制 |
最近的 回文数 |
回文数的 二进制 |
所需操作 | ans[i] |
|---|---|---|---|---|---|
| 6 | 110 | 5 | 101 | 减 1 | 1 |
| 7 | 111 | 7 | 111 | 已经是回文数 | 0 |
| 12 | 1100 | 15 | 1111 | 加 3 | 3 |
因此,ans = [1, 0, 3]。
提示:
1 <= nums.length <= 50001 <= nums[i] <= 5000