zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    杭电 1013 Digital Roots
    杭电 1040 As Easy As A+B 【排序】
    杭电 2092 整数解
    bzoj3223
    bzoj3224
    LA3905
    bzoj3601
    bzoj1002
    bzoj3105
    bzoj3332
  • 原文地址:https://www.cnblogs.com/dongqiSilent/p/10739318.html
Copyright © 2011-2022 走看看