写在前面
- 异或、移位运算
- 有思路可能得分
- 没思路1分估计也得不到
题目详情
复制代码
1
2
3
4
5
6
7
8
9
10不使用运算符 + 和 - ,计算两整数 a 、b 之和。 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = 3 输出: 1
ac代码
- 解题思想
- a、b 2个整数相异或(^)表示a/b无进位相加
- 无进位相加指的是每1个对应的二进制位相加时都没有进位
- a & b 是相加产生的进位
- a、b 2个整数相异或(^)表示a/b无进位相加
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Solution { public: int getSum(int a, int b) { while(b) { auto c = ((unsigned int)a & b) << 1; a = a ^ b; b = c; } return a; } };
- AddressSanitizer
- Address Sanitizer(ASan)是一个快速的内存错误检测工具
- AddressSanitizer 工具,会对有符号数的左移位操作做保护,强制转成无符号数做移位可绕过
或者
复制代码
1
2
3
4
5
6
7
8
9
10
11class Solution { public: int getSum(int a, int b) { unsigned int sumNoCarry = a ^ b; //求a与b无进位的和 unsigned int carry = a & b; //求a与b的进位 if(carry != 0) //当进位为零的时候就结束了 return getSum(sumNoCarry, carry << 1);、 return sumNoCarry; } };
- 参考文章
- Leetcode刷题64-371. 两整数之和(C++详细解法!!!)
- LeetCode371.两整数之和(C++实现)
最后
以上就是个性大雁最近收集整理的关于leetcode-371. 两整数之和刷题笔记(c++)的全部内容,更多相关leetcode-371.内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复