ARTS打卡计划第一周-Algorithm

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
原文地址:https://www.cnblogs.com/dongqiSilent/p/10739318.html