高端定制站开发百度品牌专区怎么收费
文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【题目提示】
- 七【解题思路】
- 八【时间频度】
- 九【代码实现】
- 十【提交结果】
一【题目类别】
- 位运算
二【题目难度】
- 中等
三【题目编号】
- 371.两整数之和
四【题目描述】
- 给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
五【题目示例】
-
示例 1:
- 输入:a = 1, b = 2
- 输出:3
-
示例 2:
- 输入:a = 2, b = 3
- 输出:5
六【题目提示】
- −1000<=a,b<=1000-1000 <= a, b <= 1000−1000<=a,b<=1000
七【解题思路】
- 利用位运算的思想:
- a ^ b:表示无进位相加
- (a & b) << 1:表示相加的进位
- a + b可以为分解为无进位的相加和相加的进位
- 不停的重复以上操作,直到没有进位的时候结束
- 最后返回结果即可
八【时间频度】
- 时间复杂度:O(log(max(a,b)))O(log(max(a,b)))O(log(max(a,b))),其中aaa和bbb分别为传入参数的值
- 空间复杂度:O(1)O(1)O(1)
九【代码实现】
- Java语言版
class Solution {public int getSum(int a, int b) {int xor = a ^ b;int carry = (a & b) << 1;while(carry != 0){int temp = xor ^ carry;carry = (xor & carry) << 1;xor = temp;}return xor;}
}
- C语言版
int getSum(int a, int b)
{while(b != 0){int carry = ((unsigned int)(a & b)) << 1;a ^= b;b = carry;}return a;
}
- Python语言版
class Solution:def getSum(self, a: int, b: int) -> int:a &= 0xFFFFFFFFb &= 0xFFFFFFFFwhile b != 0:carry = a & ba ^= bb = ((carry) << 1) & 0xFFFFFFFFreturn a if a < 0x80000000 else ~(a^0xFFFFFFFF)
- C++语言版
class Solution {
public:int getSum(int a, int b) {while(b != 0){auto carry = ((unsigned int)(a & b)) << 1;a ^= b;b = carry;}return a;}
};
十【提交结果】
-
Java语言版
-
C语言版
-
Python语言版
-
C++语言版