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('[({}[]())]'))