剑指offer 面试65题

题目65题:不用加减乘除做加法。

解法一:Python特性

# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        return sum([num1,num2])

解法二:剑指offer思路分析:三步走策略:①只做各位相加不进位(可以用异或来处理,和异或结果相同)②进位:可以想象为两个数先做位与运算,然后左移一位③把前两个步骤的结果相加,重复前两步,直到不产生进位为止。在Python中做位运算,需要做越界检查。

# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        while num2:
            sum_ = (num1 ^ num2) & 0xffffffff
            carry = ((num1 & num2)<<1)& 0xffffffff
            num1 = sum_
            num2 = carry
        if num1<0x7fffffff:
            return num1
        else:
            return ~(num1^0xffffffff)

拓展:不使用新的变量,交换两个变量的值。

①基于加减法     ②基于异或

a=a+b                a=a^b

b=a-b                b=a^b

a=a-b                a=a^b

原文地址:https://www.cnblogs.com/yanmk/p/9132362.html