12-16

12  整数转罗马

从3999一直if判断下来。大于一个标识就减去那个标识 然后再打印出对应符号。结果就是 一言难尽
无情的判断工具人。 就这 还打败了 90的人 内存还有60呢

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        rel = ''
        if num >= 1000:         #处理1000-3000
            for i in range(num//1000):
                rel += 'M'
        num = num%1000
        if num >= 100:       #处理100-999
            if num >= 900:      #处理900-999
                rel +=  'CM'
                num = num%100
            elif num >=500 :     #处理500-899
                rel += 'D'
                num = num-500
            if num >= 400:    #处理400-499
                rel += 'CD'
                num = num%100
            elif num >= 100:      #处理100-399
                for i in range(num//100):
                    rel += 'C'
                num = num%100
        if num >= 10:       #处理10-99
            if num >= 90:      #处理90-99
                rel +=  'XC'
                num = num%10
            elif num >=50 :     #处理50-89
                rel += 'L'
                num = num-50
            if num >= 40:    #处理40-49
                rel += 'XL'
                num = num%10
            elif num >= 10:      #处理10-39
                for i in range(num//10):
                    rel += 'X'
                num = num%10
        if num >= 0:       #处理1-9
            if num == 9:      #处理9
                rel +=  'IX'
                num = num-9
            elif num >=5 :     #处理5
                rel += 'V'
                num = num-5
            if num == 4:    #处理4
                rel += 'IV'
                num = num-4
            else:
                for i in range(num): #处理1-3
                    rel += 'I'
        return rel

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/integer-to-roman/solution/qing-jiao-zai-xia-wu-qing-de-ifji-qi-by-5crwp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

13:用了两个字典

代码

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        dict1 = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        dict2 = {'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
        rel = 0
        n = len(s)
        i = 0
        while i < n :
            if i == n-1:
                rel += dict1[s[i]]
                break
            if s[i:i+2] in dict2:
                rel += dict2[s[i:i+2]]
                i += 2
            else:
                rel += dict1[s[i]]
                i += 1
        return rel

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/wo-jue-de-bi-shang-ti-nan-by-yizhu-jia-0c6o/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

14:最长公共串 

竖向对比

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        i = -1
        flag = 1
        while flag == 1:
            i += 1
            for each in strs:
                try:
                    if each[i] != strs[0][i]:
                        flag = 0
                        break
                except:
                    flag = 0
                    break
        return strs[0][0:i]

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/meng-xin-ye-neng-ji-bai-bai-fen-zhi-998d-9bsn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

15 三数和  排序后双指针

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums = sorted(nums)
        n = len(nums)
        if n < 3:
            return []  #长度3都不够  拿什么来凑0
        i = 0
        rel = []
        while i < n-2:         #第一层循环  遍历的是第一个元素。
            l = i+1            #l,r是双指针,分别指向另外两个待定的元素。                         
            r = n-1
            while r > l:
                sum3 = nums[i]+nums[l]+nums[r]          #计算三个元素和
                if sum3== 0:                               #当和正好为0时 加入到结果中
                    rel .append([nums[i],nums[l],nums[r]]) 
                    l += 1 
                    r -= 1
                    while nums[l]== nums[l-1] and r>l:        #如果左右指针所指元素都是重复的,那么就一直往前后走
                        l += 1
                    while nums[r]== nums[r+1] and r>l:
                        r -= 1
                elif sum3>0:                     #¥如果和大于0  右指针左移
                    r -= 1
                    while nums[r]== nums[r+1] and r>l:
                        r -= 1
                else:                         #如果和小于0 左指针右移
                    l += 1
                    while nums[l]== nums[l-1] and r>l:
                        l += 1
            i += 1                                    #第一个元素遍历完成。左移时注意也不能重复
            while nums[i]== nums[i-1] and i < n-2:
                i+= 1
        return rel

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/3sum/solution/wo-qu-wo-jing-ran-yi-ci-jiu-xie-dui-liao-48h4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

16 三数和2  跟上题 完全没区别啊 

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        n = len(nums)
        i = 0
        nums = sorted(nums)
        mindis = abs(nums[0]  + nums[1] +nums[2]-target)
        tarsum = nums[0]  + nums[1] +nums[2]          #记录最短距离
        while i < n -2:
            l = i+1
            r = n-1
            while l < r:
                sub = nums[i]  + nums[l] +nums[r]-target
                if sub == 0:
                    return target
                if abs(sub) < mindis:
                    mindis = abs(sub)
                    tarsum = nums[i]  + nums[l] +nums[r]
                if sub > 0:
                    r -= 1
                if sub < 0:
                    l += 1
            i += 1

        return tarsum

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/3sum-closest/solution/gen-shang-yi-dao-ti-yi-mo-yi-yang-dan-sh-b77d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2021-08-15 18:28  yi术家  阅读(29)  评论(0)    收藏  举报