题目来源:
leetcode题目,网址:2220. 转换数字的最少位翻转次数 - 力扣(LeetCode)
解题思路:
先将两数字转化为二进制串,然后比较对应位上字符即可。
解题代码:
class Solution {public int minBitFlips(int start, int goal) {String binaryStart=Integer.toBinaryString(start);String binaryGoal=Integer.toBinaryString(goal);int res=0;for(int i=binaryStart.length()-1,j=binaryGoal.length()-1;i>=0 || j>=0;i--,j--){if(i>=0 && j>=0 ){if(binaryStart.charAt(i)!=binaryGoal.charAt(j))res++;}else{if(i>=0 && binaryStart.charAt(i)=='1'){res++;}else if(j>=0 && binaryGoal.charAt(j)=='1'){res++;}}}return res;}
}
总结:
官方题解是基于位运算的思路。start 和 goal 需要翻转的位为 start^goal 上值为 1 的位,异或计算后获取结果中 1 的个数即可。