栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode两整数之和简单解python题解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode两整数之和简单解python题解

题目

给你两个整数 a 和 b 不使用 运算符 和- 计算并返回两整数之和。
示例 1
输入 a 1, b 2
输出 3
示例 2
输入 a 2, b 3
输出 5

解题思路:

不可以用运算符 和- 那么我们就需要用别的计算方法代替加减 这里我第一个想到的
就是用列表和len函数来代替加减。
如果是正数 那就让列表长度加一
如果是负数 那就让列表长度减一
用这个方法要注意两个情况
1 负数比正数大的时候 跟据负数大小让列表长度增加 根据正数让列表长度减少
2 两个负数时 列表长度增加 且最后的时候列表长度要取反。

代码
class Solution(object):
 def getSum(self, a, b):
 :type a: int
 :type b: int
 :rtype: int
 change []
 # 两个数都大于零的情况 
 if a 0 and b 0:
 for i in range(b):
 change.append(1)
 for j in range(a):
 change.append(1)
 return len(change)
 # 两个数都小于零的情况 
 elif a 0 and b 0:
 for i in range(abs(b)):
 change.append(1)
 for j in range(abs(a)):
 change.append(1)
 return -(len(change))
 # 两个数只有一个数小于零的情况 
 elif a 0 or b 0:
 if max(a,b) max(abs(a),abs(b)):
 for i in range(max(a,b)):
 change.append(1)
 for j in range(min(abs(a),abs(b))):
 change.pop(0)
 return len(change)
 else:
 for i in range(max(abs(a),abs(b))):
 change.append(1)
 for j in range(min(abs(a),abs(b))):
 change.pop(0)
 return -len(change)

跟官方解法不一样 但是我觉得我可能有违规 因为我对列表取反的时候用了负号。

MASK1 4294967296 # 2^32
MASK2 2147483648 # 2^31
MASK3 2147483647 # 2^31-1
class Solution:
 def getSum(self, a: int, b: int) - int:
 while b ! 0:
 carry ((a b) 1) % MASK1
 a (a ^ b) % MASK1
 b carry
 if a MASK2: # 负数
 return ~((a ^ MASK2) ^ MASK3)
 else: # 正数
 return a

这是官方解 看完感觉自己没学过python[笑哭]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号