1. python 解法: 核心思想 无进位加法的结果 res = num1^num2, 有进位的结果 carry = (num1&num2)<<1。循环直到没有进位为止。
但是python与其他解法有区别,java c++ go等的int类型长度都是固定值,所以做num1^num2时已经把符号位(最高位,负数为1正数为0)给顺手计算好了,但是python的整数是没有固定位数的,所以每次计算完都要和0xffffffff进行&操作,来保证不会溢出,同时最后也要判断num
的正负。
# -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # write code here while num2: result = (num1 ^ num2) & 0xffffffff carry = ((num1 & num2) << 1) & 0xffffffff num1 = result num2 = carry if num1 <= 0x7fffffff: result = num1 else: result = ~(num1^0xffffffff) return result
2.java解法:同python
public class Solution {
public int Add(int num1,int num2) {
int res = 0;
int carry = 0;
while(num2 != 0){
res = num1^num2;
carry = (num1&num2)<<1;
num1 = res;
num2 = carry;
}
return num1;
}
} package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param num1 int整型
* @param num2 int整型
* @return int整型
*/
func Add( num1 int , num2 int ) int {
// write code here
res := 0
carry := 0
for num2 != 0{
res = num1^num2
carry = (num1&num2)<<1
num1 = res
num2 = carry
}
return num1
} 
京公网安备 11010502036488号