371. Sum of Two Integers

题目

https://leetcode.com/problems/sum-of-two-integers/description/

想法

最初想的是用CLA的方式,但是发现用位运算并不好算p_i,遂放弃,后选择用密码学课上学到的提取单个位的方法进行处理,做位的加法

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int getSum(int a, int b) {
int helper = 1;
int result = 0;
int c = 0;
for (int i = 0; i < sizeof(int) * 8; i++) {
int aBit = a & helper, bBit = b & helper, cBit = c & helper;
result |= (aBit ^ bBit ^ cBit);
if (!!(aBit & bBit | aBit & cBit | bBit & cBit))
c = (helper << 1);
else
c = 0;
helper <<= 1;
}
if (!!c)
result |= c;
return result;
}
};

感想

虽然是一道Easy级的题目,但是自己也是花费了不小的功夫。
主要是调bug上,考虑不周,在进位的处理上有些考虑不全,WA了好几次。

位操作还是值得学习一下的。