17.01. 不用加号的加法
设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。
示例:
输入: a = 1, b = 1
输出: 2
class Solution {
public int add(int a, int b) {
int n = (a&b) << 1;
int m = a^b;
while(n != 0)
{
int temp = m ^ n;
n = ( m & n ) << 1;
m = temp;
}
return m;
}
}
个人总结: 对位运算的思路拓展了。
17.04. 消失的数字
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动
示例 1:
输入:[3,0,1]
输出:2
示例 2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8
class Solution {
public int missingNumber(int[] nums) {
int s=0;
for(int i=1;i<=nums.length;i++)
{
s=s^i;
s=s^nums[i-1];
}
return s;
}
}
个人总结: 异或操作太巧妙了。