lc11~lc20

11 12 13 14 15 16 17 18 19 20  
完成 完成 完成 完成  完成 完成  完成   完成 完成  

11.

class Solution:
    def maxArea(self, height):
        l = 0
        r = len(height) -1
        
        area = 0
        
        if len(height) <=1:
            return 0
        
        area = (r-l) * (height[l] if height[l]<height[r] else height[r])
        
        while l < r:
            if height[l] < height[r]:
                l = l + 1
            else:
                r = r - 1
            print(l)
            area = max(area, (r-l) * (height[l] if height[l]<height[r] else height[r]))
        return area
            
        
        
if __name__ == '__main__':
    height = [1,8,6,2,5,4,8,3,7]
    sol = Solution()
    r = sol.maxArea(height) 
    print(r)

 

12. 

 

class Solution:
    def intToRoman(self, num):
        
        m_roman = ('','M','MM','MMM')
        c_roman = ('', 'C','CC','CCC','CD','D','DC','DCC','DCCC','CM')
        x_roman = ('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC')
        i_roman = ('','I','II','III','IV','V','VI','VII','VIII','IX')        
        r_str = m_roman[num//1000] + c_roman[num%1000//100] + x_roman[num%100//10] + i_roman[num%10]
        return r_str

    
if __name__ == '__main__':
    sol = Solution()
    print(sol.intToRoman(50))

 

13.

class Solution:
    def romanToInt(self, s):
        
        num = 0
        for i in range(len(s)):
            if s[i]=='M':
                if(i>0 and s[i-1] == 'C'):
                    num = num + 900 - 100
                else:
                    num = num + 1000
                
            if s[i] == 'D':
                if (i>0 and s[i-1] == 'C'):
                    num = num + 400 - 100
                else:
                    num = num + 500
            
            if s[i] == 'C':
                if (i>0 and s[i-1] == 'X'):
                    num = num + 90 -10
                else:
                    num = num + 100
                
            if s[i] == 'L':
                if (i>0 and s[i-1] == 'X'):
                    num = num + 40 - 10
                else:
                    num = num + 50
            
            if s[i] == 'X':
                if (i>0 and s[i-1]=='I'):
                    num = num + 9 -1
                else:
                    num = num + 10
            if s[i] == 'V':
                if(i>0 and s[i-1] == 'I'):
                    num = num + 4 - 1
                else:
                    num = num + 5
                
            if s[i] == 'I':
                num = num + 1
                
        return num
    

if __name__ == '__main__':
    sol = Solution()
    print(sol.romanToInt('MCMXCIV'))
    print(sol.romanToInt('LVIII'))
    print(sol.romanToInt('IX'))

 

14.

class Solution:
    def longestCommonPrefix(self, strs):
        
        r = ''
        
        for s in zip(*strs):
            if(len(set(s))==1):
                r = r + s[0]
            else:
                return r
     
        return r 

if __name__ == '__main__':
    
    sol = Solution()
    
    strs = ['flower', 'flow', 'flight']
    
    print(sol.longestCommonPrefix(strs))

 

15.

class Solution:
    def threeSum(self, nums):
        nums_sort = sorted(nums)
        
        i = 0
        r = []
        while i < len(nums) - 2:

            if i>0 and nums_sort[i] == nums_sort[i-1]:
                i = i + 1
            else:
                left = i + 1
                right = len(nums_sort) -1
                
                while left < right:
                    
                    target = nums_sort[i] + nums_sort[left] + nums_sort[right]
                    if target == 0:
                        r.append([nums_sort[i],nums_sort[left],nums_sort[right]])
                        
                        while left<right and nums_sort[left] == nums_sort[left+1]:
                            left = left + 1
                        while left<right and nums_sort[right] == nums_sort[right-1]:
                            right = right - 1
                        
                        right = right - 1
                        left = left + 1
                    if target<0:
                        left = left + 1
                    if target>0:
                        right = right - 1
                        
                i = i + 1            
        return r
    
    
if __name__ == '__main__':
    nums = [-1,0,1,2,-1,4,-2,-2,-2,4,4]
    sol = Solution()
    print(sol.threeSum(nums))

 

16.

 

class Solution:
    def threeSumClosest(self, nums, target):
        
        nums = sorted(nums)
        
        i = 0
        res = sum(nums[:3])
        n = len(nums)
        for  i  in range(n - 2):
            left, right = i + 1, n -1
            while left<right:
                temp = nums[i] + nums[left] + nums[right]
                
                if abs(temp - target) < abs(res - target):
                    res = temp
                if res == target:
                    print(i, left, right, target, temp)
                    break
                elif target > res:
                    left = left + 1
                    print(i, left, right, target, temp)
                elif target < res:
                    right = right - 1
                    print(i, left, right, target, temp)
                            
        return res
    
    
if __name__ == '__main__':
    nums = [-1,2,1,-4,1]
    sol = Solution()
    print(sol.threeSumClosest(nums, 1))

 

17.

class Solution:
    def letterCombinations(self, digits):
        
        dic = {}
        dic.update({'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv', '9':'wxyz'})
        
        if not digits:
            return []
        
        res = [ i for i in dic[digits[0]]]
        
        for i in digits[1:]:
            res = [ m+n for m in res for n in dic[i]]
            print (res)
            
        return res   
    
    
        list_str = []
        
        return list_str
    
    
if __name__ == '__main__':
    sol = Solution()
    digits = '2345678'
    print(sol.letterCombinations(digits))

18.

19. 

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
        
class Solution:
    def removeNthFromEnd(self, head, n):
        
        head_list = []
        count = 0
        while head:
            head_list.append(head)
            head = head.next
            count = count + 1
            #print(count)
            
        if count == 1:
            return None
            
        if head_list[-n].next == None:
            head_list[-n-1].next = None
            return head_list[0]
        else:
            head_list[-n].val = head_list[-n].next.val
            head_list[-n].next = head_list[-n].next.next
            return head_list[0]

if __name__ == '__main__':
    l1 = ListNode(1)
    l1.next = l11 = ListNode(2)
    l11.next = l12 = ListNode(3)
    l12.next = l13 = ListNode(4)
    l13.next = l14 = ListNode(5)
    head = l1
    sol = Solution()
    res = sol.removeNthFromEnd(l1, 5)
    
    while res:
        print(res.val)
        res = res.next

 

20.

class Solution:
    def isValid(self, s):
        
        s_list = []
        dic = {}
        dic.update({'}':'{', ']':'[', ')':'('})
        
        for i in range(len(s)):
            if s[i] in ['(','[','{']:
                s_list.append(s[i])
                
            if s[i] in [')',']','}']:
                if (len(s_list) == 0) or (s_list[len(s_list)-1] != dic[s[i]]):
                    break
                else:
                    s_list.pop()
        
        if len(s_list) == 0:
            return 'true'
        else:
            return 'false'
        
            
        
        
        
if __name__ == '__main__':
    sol = Solution()
    print(sol.isValid('[({}[]())]'))

 

posted @ 2019-11-25 09:41  liujy1  阅读(174)  评论(0编辑  收藏  举报