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