7. Reverse Integer
import math
class Solution:
def reverse(self, x: int) -> int:
ret = 0
if x >=0:
x_str = str(x)
ret = int(x_str[::-1])
else:
x =abs(x)
x_str=str(x)
ret = -1*int(x_str[::-1])
if ret>=math.pow(2,31)-1 or ret<=-1*math.pow(2,31):
return 0
else:
return ret
if __name__ == '__main__':
s = Solution()
print(s.reverse(123))
print(s.reverse(-123))
print(s.reverse(120))
print(s.reverse(-120))
print(s.reverse(1534236469))
这里出错的基本都是题目没看清楚,题目说的是如果反转溢出后返回0。这里主要的思路就是将数字转化为字符串,对字符串反转并且保持符号位。
859. Buddy Strings
class Solution:
"""
1、如果AB长度不一样,直接返回fasle
2、考虑A,B长度小于2返回false
3、如果A,B长度相等,如果A中每个字符均不相同返回false
4、变量A,B,看最终不同的字符个数是不是2,不是2返回false
,如果是2的话,看2者能否交换,能交换就是true,否则是false
"""
def buddyStrings(self, A: str, B: str) -> bool:
if len(A)!=len(B):
return False
if len(A)<2 or len(B) <2:
return False
listA = list(A)
listB = list(B)
listAret =[]
listBret=[]
if A==B:
if len(A) !=len(set(A)):
return True
else:
return False
for idx,val in enumerate(listA):
if val != listB[idx]:
listAret.append(val)
listBret.append(listB[idx])
if len(listAret)!=len(listBret):
return False
if len(listAret)!=2:
return False
if listAret[0]==listBret[1] and listAret[1]==listBret[0]:
return True
return False
if __name__=="__main__":
s = Solution();
print(s.buddyStrings("ab","ba"))
print(s.buddyStrings("abcd","abcd"))
print(s.buddyStrings("ab","ab"))
print(s.buddyStrings("aa","aa"))
print(s.buddyStrings("aaaaaaabc","aaaaaaacb"))
print(s.buddyStrings("","aa"))
此题侧重于策略的选择:
1、如果AB长度不一样,直接返回fasle
2、考虑A,B长度小于2返回false
3、如果A,B长度相等,如果A中每个字符均不相同返回false
4、变量A,B,看最终不同的字符个数是不是2,不是2返回false
,如果是2的话,看2者能否交换,能交换就是true,否则是false