题目解析
我们假设第一个输入数是bin1,第二个输入数是bin2。
需要注意的是,本题不能去求解bin1的全排列,因为题目说,发生或运算时,bin1只有某两位会发生交换。而全排列无法保证只有两位发生交换,很可能有多位发生交换。
另外,本题的bin1,bin2的长度都为N,1≤N≤1000000,这个数量级求解全排列肯定会超时的。
因此,本题不推荐使用全排列解法。
我的解题思路如下:
二进制的或运算特点是:进行运算的两个二进制数,对应某位上数有一个为1,则结果1,否则结果为0。
因此,我们可以忽略对bin2的值为1的位的检查,因为不管bin1对应位值变为多少,结果都为1,不会造成结果改变。
只对bin2的值为0的位进行检查即可。
此时有两种情况:
bin2值为0的位,在bin1对应位的值为:
- 0:则正确结果为0,想要不同结果,则需要将bin1该位和bin1上值位1的位交换
- 1:则正确结果为1,想要不同结果,则需要将bin1该位和bin1上值为0的位交换
比如用例1中:
bin1 = "010"
bin2 = "110"
bin2值为0的位只有1个,就是第三位,而对应bin1的第三位的值为0,因此bin1需要将该位值变为1,才能产生不同