├── .idea ├── .gitignore ├── vcs.xml ├── modules.xml ├── misc.xml ├── LeetCode.iml └── inspectionProfiles │ └── Project_Default.xml ├── 21-30 ├── 27. Remove_Element.py ├── 26. Remove_Duplicates_from_Sorted_Array.py ├── 28. Implement_strStr().py ├── 23. Merge_k_Sorted_Lists.py ├── 22. Generate_Parentheses.py ├── 21. Merge_Two_Sorted_Lists.py ├── 29. Divide_Two_Integers.py ├── 24. Swap_Nodes_in_Pairs.py ├── 25. Reverse_Nodes_in_k-Group.py └── 30. Substring with Concatenation of All Words.py ├── 1-10 ├── 9.Palindrome_Number.py ├── 7.Reverse_Integer.py ├── 8.String_to_Integer_(atoi).py ├── 1.Two_Sum.py ├── 6.ZigZag_Conversion.py ├── 4.Median_of_Two_Sorted_Arrays.py ├── 5.Longest_Palindromic_Substring.py ├── 3.Longest_Substring_Without_Repeating_Characters.py ├── 2.Add_Two_Numbers.py └── 10.Regular Expression Matching.py ├── 31-40 ├── 31. Next Permutation.py ├── 35. Search Insert Position.py ├── 38. Count and Say.py ├── 36. Valid Sudoku.py ├── 33. Search in Rotated Sorted Array.py ├── 34. Find First and Last Position of Element in Sorted Array.py ├── 37. Sudoku Solver.py └── 32. Longest Valid Parentheses.py ├── 11-20 ├── 20.Valid_Parentheses.py ├── 12.Integer to Roman.py ├── 14.Longest_Common_Prefix.py ├── 17.Letter_Combinations_of_a_Phone_Number.py ├── 19.Remove_Nth_Node_From_End_of_List.py ├── 13.Roman_to_Integer.py ├── 18.4Sum.py ├── 11.Container_With_Most_Water.py ├── 16.3Sum_Closest.py └── 15.3Sum.py └── README.md /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml 3 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/LeetCode.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /21-30/27. Remove_Element.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def removeElement(self, nums, val): 3 | """ 4 | :type nums: List[int] 5 | :type val: int 6 | :rtype: int 7 | """ 8 | # if len(nums) == 0: return 0 9 | 10 | 11 | point = 0 12 | for i in range(len(nums)): 13 | if nums[i] == val: continue 14 | nums[point] = nums[i] 15 | point += 1 16 | return point 17 | 18 | 19 | 20 | if __name__ == '__main__': 21 | print(Solution().removeElement([], 3)) -------------------------------------------------------------------------------- /1-10/9.Palindrome_Number.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def isPalindrome(self, x): 3 | """ 4 | :type x: int 5 | :rtype: bool 6 | """ 7 | if x < 0: return False 8 | if x == 0: return True 9 | 10 | ori_num = x 11 | pali_num = 0 12 | while x != 0: 13 | pali_num = pali_num * 10 + x % 10 14 | x //= 10 15 | if ori_num == pali_num: return True 16 | return False 17 | 18 | 19 | if __name__ == '__main__': 20 | s = Solution() 21 | result = s.isPalindrome(121) 22 | print(result) -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | -------------------------------------------------------------------------------- /21-30/26. Remove_Duplicates_from_Sorted_Array.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def removeDuplicates(self, nums): 3 | """ 4 | :type nums: List[int] 5 | :rtype: int 6 | """ 7 | point = 0 8 | cur_index = 1 9 | while cur_index < len(nums): 10 | if nums[cur_index] == nums[point]: 11 | cur_index += 1 12 | continue 13 | point += 1 14 | nums[point] = nums[cur_index] 15 | return point + 1 16 | 17 | if __name__ == '__main__': 18 | result = Solution().removeDuplicates([0,0,1,1,1,2,2,3,3,4]) 19 | print(result) -------------------------------------------------------------------------------- /21-30/28. Implement_strStr().py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def strStr(self, haystack, needle): 3 | """ 4 | :type haystack: str 5 | :type needle: str 6 | :rtype: int 7 | """ 8 | if len(needle) == 0: return 0 9 | if len(needle) > len(haystack): return -1 10 | if len(needle) == len(haystack) and needle != haystack: return -1 11 | 12 | for i in range(len(haystack) - len(needle) + 1): 13 | if haystack[i:i + len(needle)] == needle: 14 | return i 15 | return -1 16 | 17 | 18 | 19 | if __name__ == '__main__': 20 | print(Solution().strStr("hello", "ll")) -------------------------------------------------------------------------------- /31-40/31. Next Permutation.py: -------------------------------------------------------------------------------- 1 | # 这不是我的code... 思路错了 累坏了 不想写了 2 | class Solution(object): 3 | def nextPermutation(self, nums): 4 | n = len(nums) 5 | if n<2: return nums 6 | i = n-1 7 | while i>0 and nums[i-1]>=nums[i]: 8 | i -= 1 9 | if i==0 and nums[i]==max(nums): 10 | return nums.reverse() 11 | else: 12 | j = n-1 13 | while j>i-1 and nums[j]<=nums[i-1]: 14 | j -= 1 15 | temp = nums[i-1] 16 | nums[i-1] = nums[j] 17 | nums[j] = temp 18 | re = nums[i:] 19 | for h in range (len(re)): 20 | nums[n-1-h] = re[h] 21 | return nums -------------------------------------------------------------------------------- /1-10/7.Reverse_Integer.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def reverse(self, x): 3 | """ 4 | :type x: int 5 | :rtype: int 6 | """ 7 | if x == 0: return x 8 | 9 | neg = False 10 | if x < 0: 11 | neg = True 12 | x = -x 13 | 14 | result = 0 15 | while x != 0: 16 | x_remain = x % 10 17 | result = result * 10 + x_remain 18 | x = x // 10 19 | 20 | if neg == True: result = -result 21 | 22 | if result < -(2**31) or result > 2**31 - 1: return 0 23 | 24 | return result 25 | 26 | 27 | 28 | 29 | 30 | 31 | if __name__ == '__main__': 32 | s = Solution() 33 | result = s.reverse(120) 34 | print(result) -------------------------------------------------------------------------------- /21-30/23. Merge_k_Sorted_Lists.py: -------------------------------------------------------------------------------- 1 | # Definition for singly-linked list. 2 | class ListNode(object): 3 | def __init__(self, val=0, next=None): 4 | self.val = val 5 | self.next = next 6 | class Solution(object): 7 | def mergeKLists(self, lists): 8 | """ 9 | :type lists: List[ListNode] 10 | :rtype: ListNode 11 | """ 12 | nums = [] 13 | for List in lists: 14 | while List != None: 15 | nums.append(List.val) 16 | List = List.next 17 | nums = sorted(nums) 18 | head = point = ListNode(0) 19 | for i in range(len(nums)): 20 | point.next = ListNode(nums[i]) 21 | point = point.next 22 | return head.next 23 | 24 | 25 | 26 | if __name__ == '__main__': 27 | pass -------------------------------------------------------------------------------- /31-40/35. Search Insert Position.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def searchInsert(self, nums, target): 3 | """ 4 | :type nums: List[int] 5 | :type target: int 6 | :rtype: int 7 | """ 8 | if len(nums) == 0: return 0 9 | if target < nums[0]: return 0 10 | if target > nums[-1]: return len(nums) 11 | 12 | left, right = 0, len(nums) - 1 13 | while left < right: 14 | mid = (left + right) // 2 15 | if nums[mid] < target: left = mid + 1 16 | elif nums[mid] > target: right = mid - 1 17 | else: return mid 18 | 19 | if nums[left] == target: return left 20 | if nums[left] < target: return left + 1 21 | if nums[left] > target: return left 22 | 23 | 24 | if __name__ == '__main__': 25 | print(Solution().searchInsert([1,3,5,6], 0)) -------------------------------------------------------------------------------- /21-30/22. Generate_Parentheses.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def generateParenthesis(self, n): 3 | """ 4 | :type n: int 5 | :rtype: List[str] 6 | """ 7 | stack = [['', 0, 0, n, n]] 8 | ans = [] 9 | while len(stack) != 0: 10 | [cur_path, l, r, remain_l, remain_r] = stack.pop() 11 | if remain_l == 0 and remain_r == 0: 12 | ans.append(cur_path) 13 | elif remain_l == 0: 14 | ans.append(cur_path + ')' * remain_r) 15 | elif remain_l > 0 and remain_r > 0: 16 | if l > r: 17 | stack.append([cur_path + ')', l, r + 1, remain_l, remain_r - 1]) 18 | stack.append([cur_path + '(', l + 1, r, remain_l - 1, remain_r]) 19 | return ans 20 | 21 | 22 | 23 | if __name__ == '__main__': 24 | s = Solution() 25 | result = s.generateParenthesis(3) 26 | print(result) -------------------------------------------------------------------------------- /1-10/8.String_to_Integer_(atoi).py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def myAtoi(self, str): 3 | """ 4 | :type str: str 5 | :rtype: int 6 | """ 7 | if len(str) == 0: return 0 8 | 9 | str = str.strip() 10 | if len(str) == 0: return 0 11 | 12 | neg = False 13 | if str[0] == '+': str = str[1:] 14 | elif str[0] == '-': 15 | neg = True 16 | str = str[1:] 17 | 18 | num = 0 19 | for index in range(len(str)): 20 | if 48 <= ord(str[index]) <= 57: 21 | num = num * 10 + int(str[index]) 22 | else: 23 | break 24 | 25 | if neg: num = -num 26 | 27 | if num < -(2**31): return -(2**31) 28 | if num > 2**31 - 1: return 2**31 - 1 29 | 30 | return num 31 | 32 | 33 | 34 | if __name__ == '__main__': 35 | s = Solution() 36 | result = s.myAtoi("-91283472332") 37 | print(result) -------------------------------------------------------------------------------- /31-40/38. Count and Say.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def countAndSay(self, n): 3 | """ 4 | :type n: int 5 | :rtype: str 6 | """ 7 | if n == 0: return '' 8 | if n == 1: return '1' 9 | 10 | cur_str = '1' 11 | new_str = '' 12 | for i in range(1, n): 13 | cur_cnt = 1 14 | j = 0 15 | while j < len(cur_str) - 1: 16 | if cur_str[j + 1] == cur_str[j]: 17 | cur_cnt += 1 18 | else: 19 | new_str += str(cur_cnt) + cur_str[j] 20 | cur_cnt = 1 21 | j += 1 22 | new_str += str(cur_cnt) + cur_str[-1] 23 | cur_str = new_str 24 | new_str = '' 25 | return cur_str 26 | 27 | 28 | 29 | 30 | if __name__ == '__main__': 31 | print(Solution().countAndSay(3)) 32 | print(Solution().countAndSay(4)) 33 | print(Solution().countAndSay(5)) -------------------------------------------------------------------------------- /11-20/20.Valid_Parentheses.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def isValid(self, s): 3 | """ 4 | :type s: str 5 | :rtype: bool 6 | """ 7 | match = { 8 | "}" : "{", 9 | ")" : "(", 10 | "]" : "[" 11 | } 12 | 13 | stack = [] 14 | for i in range(len(s)): 15 | if len(stack) == 0: 16 | if s[i] in match.keys(): return False 17 | stack.append(s[i]) 18 | else: 19 | if s[i] in match.keys(): 20 | if stack[-1] == match[s[i]]: 21 | stack.pop() 22 | else: 23 | return False 24 | else: 25 | stack.append(s[i]) 26 | if len(stack) != 0: return False 27 | return True 28 | 29 | 30 | 31 | 32 | if __name__ == '__main__': 33 | s = Solution() 34 | result = s.isValid("{[]}") 35 | print(result) -------------------------------------------------------------------------------- /11-20/12.Integer to Roman.py: -------------------------------------------------------------------------------- 1 | class Solution: 2 | def intToRoman(self, num): 3 | """ 4 | :type num: int 5 | :rtype: str 6 | """ 7 | thousand = ['M', 'MM', 'MMM'] 8 | hundred = ['C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'] 9 | ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'] 10 | units = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] 11 | 12 | romanStr = '' 13 | n = num // 1000 14 | num = num % 1000 15 | if n != 0:romanStr += thousand[n - 1] 16 | 17 | n = num // 100 18 | num = num % 100 19 | if n != 0:romanStr += hundred[n - 1] 20 | 21 | n = num // 10 22 | num = num % 10 23 | if n != 0:romanStr += ten[n - 1] 24 | 25 | n = num 26 | if n != 0:romanStr += units[n - 1] 27 | 28 | return romanStr 29 | 30 | 31 | 32 | if __name__ == '__main__': 33 | s = Solution() 34 | result = s.intToRoman(58) 35 | print(result) -------------------------------------------------------------------------------- /11-20/14.Longest_Common_Prefix.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def longestCommonPrefix(self, strs): 3 | """ 4 | :type strs: List[str] 5 | :rtype: str 6 | """ 7 | if len(strs) == 0: return "" 8 | if len(strs) == 1: return strs[0] 9 | 10 | point = 0 11 | longest_common = "" 12 | while True: 13 | if point < len(strs[0]): 14 | cur_char = strs[0][point] 15 | else: return longest_common 16 | all_same = True 17 | for i in range(1, len(strs)): 18 | if point < len(strs[i]) and strs[i][point] == cur_char: continue 19 | else: 20 | all_same = False 21 | break 22 | if all_same == True: 23 | longest_common += cur_char 24 | point += 1 25 | else: return longest_common 26 | 27 | 28 | 29 | 30 | 31 | 32 | if __name__ == '__main__': 33 | s = Solution() 34 | result = s.longestCommonPrefix(["flower","flow","flight"]) 35 | print(result) -------------------------------------------------------------------------------- /1-10/1.Two_Sum.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def twoSum(self, nums, target): 3 | """ 4 | :type nums: List[int] 5 | :type target: int 6 | :rtype: List[int] 7 | """ 8 | sort_nums = sorted(nums) 9 | left, right = 0, len(sort_nums) - 1 10 | # while sort_nums[right] > target: right -= 1 11 | while left < right: 12 | num_sum = sort_nums[left] + sort_nums[right] 13 | if num_sum > target: right -= 1 14 | elif num_sum < target: left += 1 15 | elif num_sum == target: 16 | if sort_nums[left] == sort_nums[right]: 17 | index1 = nums.index(sort_nums[left]) 18 | del nums[index1] 19 | index2 = nums.index(sort_nums[right]) + 1 20 | return [index1, index2] 21 | else: 22 | return [nums.index(sort_nums[left]), nums.index(sort_nums[right])] 23 | 24 | if __name__ == '__main__': 25 | # nums = [2, 7, 11, 15] 26 | nums = [3, 2, 4] 27 | target = 6 28 | 29 | s = Solution() 30 | result = s.twoSum(nums, target) 31 | print(result) 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /1-10/6.ZigZag_Conversion.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def convert(self, s, numRows): 3 | """ 4 | :type s: str 5 | :type numRows: int 6 | :rtype: str 7 | """ 8 | if len(s) <= 0: return "" 9 | if numRows == 1 or numRows >= len(s): return s 10 | if numRows > len(s): return s 11 | 12 | 13 | result = "" 14 | for i in range(numRows): 15 | if (i == 0) or (i == numRows - 1): 16 | x = 0 17 | while i + (numRows + (numRows - 2)) * x < len(s): 18 | result += s[(numRows + (numRows - 2)) * x + i] 19 | x += 1 20 | else: 21 | x = 0 22 | while True: 23 | if i + (numRows + (numRows - 2)) * x < len(s): 24 | result += s[i + (numRows + (numRows - 2)) * x] 25 | else: 26 | break 27 | if i + (numRows + (numRows - 2)) * (x + 1) - i * 2 < len(s): 28 | result += s[i + (numRows + (numRows - 2)) * (x + 1) - i * 2] 29 | x += 1 30 | return result 31 | 32 | 33 | 34 | if __name__ == '__main__': 35 | s = Solution() 36 | result = s.convert("AB",1) 37 | print(result) -------------------------------------------------------------------------------- /11-20/17.Letter_Combinations_of_a_Phone_Number.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def __init__(self): 3 | self.dict = { 4 | "2": ['a', 'b', 'c'], 5 | "3": ['d', 'e', 'f'], 6 | "4": ['g', 'h', 'i'], 7 | "5": ['j', 'k', 'l'], 8 | "6": ['m', 'n', 'o'], 9 | "7": ['p', 'q', 'r', 's'], 10 | "8": ['t', 'u', 'v'], 11 | "9": ['w', 'x', 'y', 'z'] 12 | } 13 | 14 | def get_string(self, num_str): 15 | if len(num_str) == 0: return [""] 16 | if len(num_str) == 1: return self.dict[num_str[0]] 17 | 18 | final_result = [] 19 | cur_str_cand = self.dict[num_str[0]] 20 | for i in range(len(cur_str_cand)): 21 | result = self.get_string(num_str[1:]) 22 | for j in range(len(result)): 23 | final_result.append(cur_str_cand[i] + result[j]) 24 | return final_result 25 | 26 | def letterCombinations(self, digits): 27 | """ 28 | :type digits: str 29 | :rtype: List[str] 30 | """ 31 | if len(digits) == 0: return [] 32 | 33 | return self.get_string(digits) 34 | 35 | 36 | 37 | 38 | 39 | if __name__ == '__main__': 40 | s = Solution() 41 | result = s.letterCombinations("23") 42 | print(result) -------------------------------------------------------------------------------- /1-10/4.Median_of_Two_Sorted_Arrays.py: -------------------------------------------------------------------------------- 1 | class Solution: 2 | def findMedianSortedArrays(self, nums1, nums2): 3 | def getKthElement(k): 4 | index1, index2 = 0, 0 5 | while True: 6 | # 特殊情况 7 | if index1 == m: 8 | return nums2[index2 + k - 1] 9 | if index2 == n: 10 | return nums1[index1 + k - 1] 11 | if k == 1: 12 | return min(nums1[index1], nums2[index2]) 13 | 14 | # 正常情况 15 | newIndex1 = min(index1 + k // 2 - 1, m - 1) 16 | newIndex2 = min(index2 + k // 2 - 1, n - 1) 17 | pivot1, pivot2 = nums1[newIndex1], nums2[newIndex2] 18 | if pivot1 <= pivot2: 19 | k -= newIndex1 - index1 + 1 20 | index1 = newIndex1 + 1 21 | else: 22 | k -= newIndex2 - index2 + 1 23 | index2 = newIndex2 + 1 24 | 25 | m, n = len(nums1), len(nums2) 26 | totalLength = m + n 27 | if totalLength % 2 == 1: 28 | return getKthElement((totalLength + 1) // 2) 29 | else: 30 | return (getKthElement(totalLength // 2) + getKthElement(totalLength // 2 + 1)) / 2 31 | 32 | 33 | 34 | if __name__ == '__main__': 35 | s = Solution() 36 | result = s.findMedianSortedArrays([1, 3], [2]) 37 | print(result) -------------------------------------------------------------------------------- /1-10/5.Longest_Palindromic_Substring.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def longestPalindrome(self, s): 3 | """ 4 | :type s: str 5 | :rtype: str 6 | """ 7 | if len(s) == 0: return "" 8 | if len(s) == 1: return s 9 | 10 | max_length = 0 11 | max_sub_string = "" 12 | 13 | i = 0 14 | while i < len(s) - 1: 15 | if i % 1 == 0.5: 16 | left, right = int(i - 0.5), int(i + 0.5) 17 | else: 18 | left, right = int(i), int(i) 19 | cnt = 0 20 | while left >= 0 and right <= len(s) - 1: 21 | if s[left] == s[right]: 22 | left -= 1 23 | right += 1 24 | cnt += 1 25 | else: 26 | break 27 | 28 | if i % 1 == 0.5 and cnt * 2 > max_length: 29 | max_length = cnt * 2 30 | max_sub_string = s[left + 1: right] 31 | if i % 1 == 0 and cnt * 2 - 1 > max_length: 32 | max_length = cnt * 2 - 1 33 | max_sub_string = s[left + 1: right] 34 | 35 | if (len(s) - 1 - i) * 2 + 1 < max_length: return max_sub_string 36 | i += 0.5 37 | 38 | return max_sub_string 39 | 40 | 41 | 42 | 43 | 44 | 45 | if __name__ == '__main__': 46 | a = ['a' for _ in range(1000)] 47 | s = Solution() 48 | result = s.longestPalindrome(a) 49 | print(len(result)) -------------------------------------------------------------------------------- /11-20/19.Remove_Nth_Node_From_End_of_List.py: -------------------------------------------------------------------------------- 1 | # Definition for singly-linked list. 2 | class ListNode(object): 3 | def __init__(self, val=0, next=None): 4 | self.val = val 5 | self.next = next 6 | 7 | def create_link(nums): 8 | head = ListNode(None) 9 | cur_node = head 10 | 11 | for i in range(len(nums)): 12 | cur_node.next = ListNode(nums[i]) 13 | cur_node = cur_node.next 14 | 15 | return head.next 16 | 17 | def check_link(link): 18 | while link != None: 19 | print(link.val, end=' ') 20 | link = link.next 21 | print() 22 | 23 | class Solution(object): 24 | def removeNthFromEnd(self, head, n): 25 | """ 26 | :type head: ListNode 27 | :type n: int 28 | :rtype: ListNode 29 | """ 30 | 31 | front = head 32 | for i in range(1, n + 1): 33 | front = front.next 34 | if front == None: return head.next 35 | # if front.next == None: return head.next 36 | 37 | rear = head 38 | while front.next != None: 39 | front = front.next 40 | rear = rear.next 41 | if rear.next != None: 42 | rear.next = rear.next.next 43 | else: 44 | rear.next = None 45 | 46 | return head 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | s = Solution() 52 | linked_list = create_link([1, 2]) 53 | check_link(linked_list) 54 | result = s.removeNthFromEnd(linked_list, 2) 55 | check_link(result) -------------------------------------------------------------------------------- /1-10/3.Longest_Substring_Without_Repeating_Characters.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def lengthOfLongestSubstring(self, s): 3 | """ 4 | :type s: str 5 | :rtype: int 6 | """ 7 | if len(s) == 0: return 0 8 | if len(s) == 1: return 1 9 | 10 | repeat_word_dict = {} 11 | max_cnt = 0 12 | 13 | cur_left = 0 14 | cur_pos = 0 15 | cur_cnt = 0 16 | while cur_left < len(s): 17 | if s[cur_pos] not in repeat_word_dict.keys(): 18 | repeat_word_dict[s[cur_pos]] = cur_pos 19 | else: 20 | if repeat_word_dict[s[cur_pos]] < cur_left: 21 | repeat_word_dict[s[cur_pos]] = cur_pos 22 | else: 23 | cur_cnt = cur_pos - cur_left 24 | if cur_cnt > max_cnt: max_cnt = cur_cnt 25 | cur_left = repeat_word_dict[s[cur_pos]] + 1 26 | cur_cnt = cur_pos - cur_left + 1 27 | repeat_word_dict[s[cur_pos]] = cur_pos 28 | cur_pos += 1 29 | if cur_pos == len(s): 30 | cur_cnt = cur_pos - cur_left 31 | if cur_cnt > max_cnt: max_cnt = cur_cnt 32 | return max_cnt 33 | 34 | if cur_left == len(s): 35 | if cur_cnt > max_cnt: max_cnt = cur_cnt 36 | 37 | return max_cnt 38 | 39 | 40 | 41 | 42 | if __name__ == '__main__': 43 | s = Solution() 44 | result = s.lengthOfLongestSubstring("pwwkew") 45 | print(result) -------------------------------------------------------------------------------- /11-20/13.Roman_to_Integer.py: -------------------------------------------------------------------------------- 1 | class Solution: 2 | def romanToInt(self, s): 3 | """ 4 | :type s: str 5 | :rtype: int 6 | """ 7 | thousand = ['M', 'MM', 'MMM'] 8 | hundred = ['C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'] 9 | ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'] 10 | units = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] 11 | 12 | intNum = 0 13 | roman = s 14 | for i in range(len(thousand) - 1, -1, -1): 15 | if roman.startswith(thousand[i]): 16 | intNum += 1000 * (i + 1) 17 | ln = len(thousand[i]) 18 | roman = roman[ln:] 19 | break 20 | 21 | for i in range(len(hundred) - 1, -1, -1): 22 | if roman.startswith(hundred[i]): 23 | intNum += 100 * (i + 1) 24 | ln = len(hundred[i]) 25 | roman = roman[ln:] 26 | break 27 | 28 | for i in range(len(ten) - 1, -1, -1): 29 | if roman.startswith(ten[i]): 30 | intNum += 10 * (i + 1) 31 | ln = len(ten[i]) 32 | roman = roman[ln:] 33 | break 34 | 35 | for i in range(len(units) - 1, -1, -1): 36 | if roman.startswith(units[i]): 37 | intNum += 1 * (i + 1) 38 | ln = len(units[i]) 39 | roman = roman[ln:] 40 | break 41 | 42 | return intNum 43 | 44 | if __name__ == '__main__': 45 | s = Solution() 46 | result = s.romanToInt("III") 47 | print(result) 48 | -------------------------------------------------------------------------------- /21-30/21. Merge_Two_Sorted_Lists.py: -------------------------------------------------------------------------------- 1 | #Definition for singly-linked list. 2 | class ListNode(object): 3 | def __init__(self, val=0, next=None): 4 | self.val = val 5 | self.next = next 6 | 7 | def create_link(nums): 8 | head = ListNode(None) 9 | cur_node = head 10 | 11 | for i in range(len(nums)): 12 | cur_node.next = ListNode(nums[i]) 13 | cur_node = cur_node.next 14 | 15 | return head.next 16 | 17 | def check_link(link): 18 | while link != None: 19 | print(link.val, end=' ') 20 | link = link.next 21 | print() 22 | 23 | class Solution(object): 24 | def mergeTwoLists(self, l1, l2): 25 | """ 26 | :type l1: ListNode 27 | :type l2: ListNode 28 | :rtype: ListNode 29 | """ 30 | 31 | head = ListNode(0) 32 | cur_point = head 33 | while l1 != None and l2 != None: 34 | if l1.val < l2.val: 35 | cur_point.next = l1 36 | cur_point = cur_point.next 37 | l1 = l1.next 38 | else: 39 | cur_point.next = l2 40 | cur_point = cur_point.next 41 | l2 = l2.next 42 | while l1 != None: 43 | cur_point.next = l1 44 | cur_point = cur_point.next 45 | l1 = l1.next 46 | while l2 != None: 47 | cur_point.next = l2 48 | cur_point = cur_point.next 49 | l2 = l2.next 50 | cur_point.next = None 51 | return head.next 52 | 53 | 54 | 55 | if __name__ == '__main__': 56 | l1 = create_link([1, 2, 4]) 57 | l2 = create_link([1, 3, 4]) 58 | check_link(l1) 59 | check_link(l2) 60 | s = Solution() 61 | result = s.mergeTwoLists(l1, l2) 62 | check_link(result) -------------------------------------------------------------------------------- /21-30/29. Divide_Two_Integers.py: -------------------------------------------------------------------------------- 1 | import math 2 | class Solution(object): 3 | def divide(self, dividend, divisor): 4 | """ 5 | :type dividend: int 6 | :type divisor: int 7 | :rtype: int 8 | """ 9 | if dividend == 0: return 0 10 | 11 | result_neg = False 12 | if dividend < 0 and divisor > 0 or dividend > 0 and divisor < 0: result_neg = True 13 | dividend, divisor = math.fabs(dividend), math.fabs(divisor) 14 | 15 | cnt = 0 16 | cur_sum = 0 17 | cur_cnt = 0 18 | cur_sub_gap = dividend 19 | 20 | while True: 21 | if cur_sum == 0: 22 | if divisor > cur_sub_gap: 23 | cnt = cnt if result_neg == False else 0-cnt 24 | cnt = 2 ** 31 - 1 if cnt > 2 ** 31 - 1 else cnt 25 | return cnt 26 | cur_sum += divisor 27 | cur_cnt += 1 28 | cur_sub_gap -= divisor 29 | continue 30 | while cur_sum + cur_sum <= cur_sub_gap: 31 | cur_sub_gap -= cur_sum 32 | cur_sum += cur_sum 33 | cur_cnt += cur_cnt 34 | cnt += cur_cnt 35 | cur_cnt = 0 36 | cur_sum = 0 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | # while cur_sum < dividend: 46 | # if cur_sum + cur_sum <= dividend: 47 | # cur_sum += cur_sum 48 | # cnt += cnt 49 | # elif cur_sum + divisor <= dividend: 50 | # cur_sum += divisor 51 | # cnt += 1 52 | # else: break 53 | # if result_neg == True: cnt = 0 - cnt 54 | # return cnt 55 | 56 | 57 | 58 | 59 | if __name__ == '__main__': 60 | print(Solution().divide(10, 3)) -------------------------------------------------------------------------------- /1-10/2.Add_Two_Numbers.py: -------------------------------------------------------------------------------- 1 | import copy 2 | 3 | # Definition for singly-linked list. 4 | class ListNode: 5 | def __init__(self, x): 6 | self.val = x 7 | self.next = None 8 | 9 | def create_link(nums): 10 | head = ListNode(None) 11 | cur_node = head 12 | 13 | for i in range(len(nums)): 14 | cur_node.next = ListNode(nums[i]) 15 | cur_node = cur_node.next 16 | 17 | return head.next 18 | 19 | def check_link(link): 20 | while link != None: 21 | print(link.val, end=' ') 22 | link = link.next 23 | print() 24 | 25 | 26 | class Solution(object): 27 | def get_nums(self, link): 28 | result = 0 29 | multiple = 1 30 | while link != None: 31 | result += link.val * multiple 32 | multiple *= 10 33 | link = link.next 34 | return result 35 | 36 | def create_link(self, nums): 37 | link_nums = [] 38 | if nums == 0: link_nums.append(0) 39 | else: 40 | while nums != 0: 41 | link_nums.append(nums % 10) 42 | nums //= 10 43 | 44 | head = ListNode(None) 45 | cur_node = head 46 | for i in range(len(link_nums)): 47 | cur_node.next = ListNode(link_nums[i]) 48 | cur_node = cur_node.next 49 | return head.next 50 | 51 | def addTwoNumbers(self, l1, l2): 52 | """ 53 | :type l1: ListNode 54 | :type l2: ListNode 55 | :rtype: ListNode 56 | """ 57 | num1 = self.get_nums(l1) 58 | num2 = self.get_nums(l2) 59 | return self.create_link(num1 + num2) 60 | 61 | if __name__ == '__main__': 62 | l1 = create_link([2, 4, 3]) 63 | l2 = create_link([5, 6, 4]) 64 | 65 | s = Solution() 66 | result = s.addTwoNumbers(l1, l2) 67 | check_link(result) 68 | -------------------------------------------------------------------------------- /31-40/36. Valid Sudoku.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def isValidSudoku(self, board): 3 | """ 4 | :type board: List[List[str]] 5 | :rtype: bool 6 | """ 7 | 8 | for i in range(9): 9 | num_dict = [0 for _ in range(10)] 10 | for j in range(9): 11 | if board[i][j] == '.': continue 12 | if num_dict[int(board[i][j])] == 1: return False 13 | num_dict[int(board[i][j])] += 1 14 | 15 | for j in range(9): 16 | num_dict = [0 for _ in range(10)] 17 | for i in range(9): 18 | if board[i][j] == '.': continue 19 | if num_dict[int(board[i][j])] == 1: return False 20 | num_dict[int(board[i][j])] += 1 21 | 22 | for i in [0, 3, 6]: 23 | for j in [0, 3, 6]: 24 | num_dict = [0 for _ in range(10)] 25 | for k in range(3): 26 | for v in range(3): 27 | if board[i + k][j + v] == '.': continue 28 | if num_dict[int(board[i + k][j + v])] == 1: return False 29 | num_dict[int(board[i + k][j + v])] += 1 30 | return True 31 | 32 | 33 | 34 | 35 | if __name__ == '__main__': 36 | result = Solution().isValidSudoku( 37 | [[".", ".", ".", ".", "5", ".", ".", "1", "."], 38 | [".", "4", ".", "3", ".", ".", ".", ".", "."], 39 | [".", ".", ".", ".", ".", "3", ".", ".", "1"], 40 | ["8", ".", ".", ".", ".", ".", ".", "2", "."], 41 | [".", ".", "2", ".", "7", ".", ".", ".", "."], 42 | [".", "1", "5", ".", ".", ".", ".", ".", "."], 43 | [".", ".", ".", ".", ".", "2", ".", ".", "."], 44 | [".", "2", ".", "9", ".", ".", ".", ".", "."], 45 | [".", ".", "4", ".", ".", ".", ".", ".", "."]] 46 | ) 47 | print(result) -------------------------------------------------------------------------------- /11-20/18.4Sum.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def fourSum(self, nums, target): 3 | """ 4 | :type nums: List[int] 5 | :type target: int 6 | :rtype: List[List[int]] 7 | """ 8 | if len(nums) < 4: return [] 9 | if len(nums) == 4: 10 | if sum(nums) == target: return [nums] 11 | return [] 12 | 13 | nums = sorted(nums) 14 | 15 | final_result = [] 16 | for i in range(len(nums) - 3): 17 | if i > 0 and nums[i] == nums[i - 1]: continue 18 | if sum(nums[i: i + 4]) > target: break 19 | if sum(nums[-4:]) < target: break 20 | 21 | three_target = target - nums[i] 22 | 23 | for j in range(i + 1, len(nums) - 2): 24 | if j > i + 1 and nums[j] == nums[j - 1]: continue 25 | if sum(nums[j:j + 3]) > three_target: break 26 | if sum(nums[-3:]) < three_target: break 27 | 28 | two_target = three_target - nums[j] 29 | 30 | left, right = j + 1, len(nums) - 1 31 | while left < right: 32 | if nums[left] + nums[right] == two_target: 33 | final_result.append([nums[i], nums[j], nums[left], nums[right]]) 34 | left += 1 35 | right -= 1 36 | while left < right and nums[left] == nums[left - 1]: left += 1 37 | while left < right and nums[right] == nums[right + 1]: right -= 1 38 | elif nums[left] + nums[right] < two_target: 39 | left += 1 40 | elif nums[left] + nums[right] > two_target: 41 | right -= 1 42 | return final_result 43 | 44 | if __name__ == '__main__': 45 | s = Solution() 46 | result = s.fourSum([1, 0, -1, 0, -2, 2], 0) 47 | print(result) 48 | -------------------------------------------------------------------------------- /31-40/33. Search in Rotated Sorted Array.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def sub_search(self, nums, left, right, target): 3 | if left > right: return -1 4 | if left == right: return left if nums[left] == target else -1 5 | 6 | if nums[left] <= nums[right]: 7 | while left <= right: 8 | mid = (left + right) // 2 9 | if nums[mid] < target: left = mid + 1 10 | elif nums[mid] > target: right = mid - 1 11 | else: return mid 12 | return -1 13 | else: 14 | if left + 1 == right: 15 | if target in nums[left: right + 1]: 16 | return left if nums[left] == target else right 17 | return -1 18 | mid = (left + right) // 2 19 | if nums[mid] == target: return mid 20 | if nums[mid] > nums[left]: 21 | if nums[left] <= target < nums[mid]: 22 | return self.sub_search(nums, left, mid - 1, target) 23 | else: 24 | return self.sub_search(nums, mid + 1, right, target) 25 | else: 26 | if target < nums[mid]: return self.sub_search(nums, left, mid - 1, target) 27 | else: 28 | if target > nums[right]: 29 | return self.sub_search(nums, left, mid - 1, target) 30 | return self.sub_search(nums, mid + 1, right, target) 31 | 32 | 33 | def search(self, nums, target): 34 | """ 35 | :type nums: List[int] 36 | :type target: int 37 | :rtype: int 38 | """ 39 | if len(nums) == 0: return -1 40 | if len(nums) == 1: return 0 if nums[0] == target else -1 41 | if len(nums) == 2: 42 | if target in nums: return nums.index(target) 43 | return -1 44 | return self.sub_search(nums, 0, len(nums) - 1, target) 45 | 46 | 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | print(Solution().search([5,1,2,3,4], 1)) -------------------------------------------------------------------------------- /21-30/24. Swap_Nodes_in_Pairs.py: -------------------------------------------------------------------------------- 1 | # Definition for singly-linked list. 2 | class ListNode(object): 3 | def __init__(self, val=0, next=None): 4 | self.val = val 5 | self.next = next 6 | 7 | def create_link(nums): 8 | head = ListNode(None) 9 | cur_node = head 10 | 11 | for i in range(len(nums)): 12 | cur_node.next = ListNode(nums[i]) 13 | cur_node = cur_node.next 14 | 15 | return head.next 16 | 17 | def check_link(link): 18 | while link != None: 19 | print(link.val, end=' ') 20 | link = link.next 21 | print() 22 | 23 | class Solution(object): 24 | def swapPairs(self, head): 25 | """ 26 | :type head: ListNode 27 | :rtype: ListNode 28 | """ 29 | if head == None: return None 30 | if head.next == None: return head 31 | if head.next.next == None: 32 | new_head = head.next 33 | new_head.next = head 34 | new_head.next.next = None 35 | return new_head 36 | 37 | 38 | new_head = ListNode(0) 39 | new_head.next = head 40 | 41 | font_point = rear_point = new_head 42 | for i in range(3): font_point = font_point.next 43 | while font_point != None: 44 | tmp = rear_point.next 45 | rear_point.next = rear_point.next.next 46 | rear_point.next.next = tmp 47 | tmp.next = font_point 48 | 49 | rear_point = rear_point.next.next 50 | if font_point.next != None: 51 | if font_point.next.next != None: 52 | font_point = font_point.next.next 53 | else: 54 | rear_point.next = rear_point.next.next 55 | rear_point.next.next = font_point 56 | font_point.next = None 57 | return new_head.next 58 | else: 59 | return new_head.next 60 | 61 | 62 | 63 | 64 | if __name__ == '__main__': 65 | l = create_link([1, 2, 3, 4]) 66 | s = Solution() 67 | result = s.swapPairs(l) 68 | check_link(result) -------------------------------------------------------------------------------- /21-30/25. Reverse_Nodes_in_k-Group.py: -------------------------------------------------------------------------------- 1 | # Definition for singly-linked list. 2 | class ListNode: 3 | def __init__(self, x): 4 | self.val = x 5 | self.next = None 6 | 7 | def create_link(nums): 8 | head = ListNode(None) 9 | cur_node = head 10 | 11 | for i in range(len(nums)): 12 | cur_node.next = ListNode(nums[i]) 13 | cur_node = cur_node.next 14 | 15 | return head.next 16 | 17 | def check_link(link): 18 | while link != None: 19 | print(link.val, end=' ') 20 | link = link.next 21 | print() 22 | 23 | 24 | class Solution(object): 25 | def reverse_linkList(self, head, rear): 26 | new_head = ListNode(0) 27 | new_rear = head 28 | 29 | while head != rear: 30 | tmp_point = head.next 31 | head.next = new_head.next 32 | new_head.next = head 33 | head = tmp_point 34 | head.next = new_head.next 35 | new_head.next = head 36 | return new_head.next, new_rear 37 | 38 | def reverseKGroup(self, head, k): 39 | """ 40 | :type head: ListNode 41 | :type k: int 42 | :rtype: ListNode 43 | """ 44 | if k <= 1: return head 45 | 46 | new_head = ListNode(0) 47 | new_head.next = head 48 | 49 | font = rear = new_head 50 | for i in range(k): 51 | if font != None: font = font.next 52 | else: return head 53 | 54 | while True: 55 | cur_font = font.next 56 | sub_font, sub_rear = self.reverse_linkList(rear.next, font) 57 | rear.next = sub_font 58 | sub_rear.next = cur_font 59 | font = sub_rear 60 | 61 | for i in range(k): 62 | if font.next != None: 63 | font = font.next 64 | rear = rear.next 65 | else: return new_head.next 66 | 67 | 68 | 69 | if __name__ == '__main__': 70 | l = create_link([1, 2, 3, 4, 5]) 71 | check_link(l) 72 | s = Solution() 73 | result = s.reverseKGroup(l, 3) 74 | check_link(result) 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /31-40/34. Find First and Last Position of Element in Sorted Array.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def searchRange(self, nums, target): 3 | """ 4 | :type nums: List[int] 5 | :type target: int 6 | :rtype: List[int] 7 | """ 8 | if len(nums) == 0: return [-1, -1] 9 | if len(nums) == 1: return [0, 0] if target == nums[0] else [-1, -1] 10 | 11 | left, right = 0, len(nums) - 1 12 | target_point = -1 13 | while left <= right: 14 | mid = (left + right) // 2 15 | if nums[mid] < target: 16 | left = mid + 1 17 | elif nums[mid] > target: 18 | right = mid - 1 19 | else: 20 | target_point = mid 21 | break 22 | if target_point == -1: return [-1, -1] 23 | 24 | target_left, target_right = target_point, target_point 25 | if target_point < len(nums) - 1 and nums[target_point + 1] == target: 26 | left = target_point + 1 27 | right = len(nums) - 1 28 | while left <= right: 29 | mid = (left + right) // 2 30 | if nums[mid] == target: 31 | if mid < len(nums) - 1 and nums[mid + 1] == target: 32 | left = mid + 1 33 | else: 34 | target_right = mid 35 | break 36 | else: 37 | right = mid - 1 38 | if target_point > 0 and nums[target_point - 1] == target: 39 | left = 0 40 | right = target_point - 1 41 | while left <= right: 42 | mid = (left + right) // 2 43 | if nums[mid] == target: 44 | if mid > 0 and nums[mid - 1] == target: 45 | right = mid - 1 46 | else: 47 | target_left = mid 48 | break 49 | else: 50 | left = mid + 1 51 | return [target_left, target_right] 52 | 53 | 54 | 55 | 56 | if __name__ == '__main__': 57 | print(Solution().searchRange([5,7], 9)) -------------------------------------------------------------------------------- /11-20/11.Container_With_Most_Water.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def maxArea(self, height): 3 | """ 4 | :type height: List[int] 5 | :rtype: int 6 | """ 7 | if len(height) <= 1: return 0 8 | if len(height) == 2: return min(height) 9 | 10 | cur_water = min(height[0], height[-1]) * (len(height) - 1) 11 | left, right = 0, len(height) - 1 12 | max_water = cur_water 13 | 14 | while left < right: 15 | if height[left] < height[right]: 16 | cur_left_height = height[left] 17 | while left < right and height[left] <= cur_left_height: 18 | left += 1 19 | if left >= right: break 20 | cur_water = min(height[left], height[right]) * (right - left) 21 | max_water = cur_water if cur_water > max_water else max_water 22 | elif height[left] > height[right]: 23 | cur_right_height = height[right] 24 | while left < right and height[right] <= cur_right_height: 25 | right -= 1 26 | if right <= left: break 27 | cur_water = min(height[left], height[right]) * (right - left) 28 | max_water = cur_water if cur_water > max_water else max_water 29 | else: 30 | cur_tmp_left, cur_tmp_right = left, right 31 | while cur_tmp_left < cur_tmp_right: 32 | if height[cur_tmp_left] > height[left]: break 33 | if height[cur_tmp_right] > height[right]: break 34 | cur_tmp_left += 1 35 | cur_tmp_right -= 1 36 | if cur_tmp_left >= cur_tmp_right: break 37 | if height[cur_tmp_left] > height[left]: left = cur_tmp_left 38 | elif height[cur_tmp_right] > height[right]: right = cur_tmp_right 39 | cur_water = min((height[left], height[right])) * (right - left) 40 | max_water = cur_water if cur_water > max_water else max_water 41 | return max_water 42 | 43 | 44 | 45 | 46 | if __name__ == '__main__': 47 | s = Solution() 48 | result = s.maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]) 49 | print(result) -------------------------------------------------------------------------------- /1-10/10.Regular Expression Matching.py: -------------------------------------------------------------------------------- 1 | # this code is worong!!! 2 | 3 | class Solution(object): 4 | def match(self, s, p): 5 | pass 6 | 7 | def isMatch(self, s, p): 8 | """ 9 | :type s: str 10 | :type p: str 11 | :rtype: bool 12 | """ 13 | pure_falg = True 14 | for i in range(len(p)): 15 | if p[i] in ['.','*']: pure_falg = False 16 | if pure_falg == True: 17 | if pure_falg == s: return True 18 | return False 19 | 20 | 21 | if len(s) == 0 or len(p) == 0: return False 22 | 23 | if len(p) == 1: 24 | if s[0] == p[0] or p[0] == '.': return True 25 | return False 26 | if len(p) > 1: 27 | if p[1] != '*': 28 | if s[0] == p[0] or p[0] == '.': 29 | return self.isMatch(s[1:], p[1:]) 30 | else: 31 | return False 32 | else: 33 | if s[0] != p[0] and p[0] != '.': 34 | if len(p) == 2: return True 35 | else: 36 | return self.isMatch(s, p[2:]) 37 | elif p[0] == '.': 38 | if len(p) == 2: return True 39 | for i in range(len(s)): 40 | result = self.isMatch(s[i:], p[2:]) 41 | if result == True: return True 42 | return False 43 | elif s[0] == p[0]: 44 | if len(p) == 2: return True 45 | left, right = 0,0 46 | for i in range(1, len(s)): 47 | if s[i] == s[0]: 48 | right = i 49 | continue 50 | else: 51 | break 52 | if right == len(s) - 1: return True 53 | 54 | for i in range(left, right + 2): 55 | result = self.isMatch(s[i:], p[2:]) 56 | if result == True: return True 57 | return False 58 | 59 | 60 | if __name__ == '__main__': 61 | s = Solution() 62 | result = s.isMatch("issippi", "is*p*.") 63 | print(result) -------------------------------------------------------------------------------- /11-20/16.3Sum_Closest.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | class Solution(object): 4 | def two_sum(self, nums, target): 5 | left, right = 0, len(nums) - 1 6 | 7 | closest_gap = 2**32 8 | closest_nums = [] 9 | while left < right: 10 | if nums[left] * 2 > target: 11 | cur_sum = nums[left] + nums[left + 1] 12 | cur_gap = math.fabs(cur_sum - target) 13 | if cur_gap < closest_gap: 14 | return [nums[left], nums[left + 1]] 15 | if nums[right] * 2 < target: 16 | cur_sum = nums[right] + nums[right - 1] 17 | cur_gap = math.fabs(cur_sum - target) 18 | if cur_gap < closest_gap: 19 | return [nums[right], nums[right - 1]] 20 | 21 | cur_sum = nums[left] + nums[right] 22 | cur_gap = math.fabs(cur_sum - target) 23 | if cur_gap < closest_gap: 24 | closest_gap = cur_gap 25 | closest_nums = [nums[left], nums[right]] 26 | 27 | if cur_sum < target: 28 | left += 1 29 | elif cur_sum > target: 30 | right -= 1 31 | else: 32 | return [nums[left], nums[right]] 33 | return closest_nums 34 | 35 | def threeSumClosest(self, nums, target): 36 | """ 37 | :type nums: List[int] 38 | :type target: int 39 | :rtype: int 40 | """ 41 | if len(nums) < 3: return None 42 | if len(nums) == 3: return sum(nums) 43 | nums = sorted(nums) 44 | 45 | closest_gap = 2**32 46 | closest_sum = 0 47 | for i in range(len(nums) - 2): 48 | if nums[i] * 3 > target: 49 | cur_sum = sum(nums[i: i + 3]) 50 | cur_gap = math.fabs(cur_sum - target) 51 | if cur_gap < closest_gap: 52 | closest_gap = cur_gap 53 | closest_sum = cur_sum 54 | break 55 | 56 | cur_sum = nums[i] + sum(self.two_sum(nums[i + 1:], target - nums[i])) 57 | cur_gap = math.fabs(cur_sum - target) 58 | if cur_gap < closest_gap: 59 | closest_sum = cur_sum 60 | closest_gap = cur_gap 61 | if cur_gap == 0: return closest_sum 62 | return closest_sum 63 | 64 | 65 | 66 | if __name__ == '__main__': 67 | s = Solution() 68 | result = s.threeSumClosest([1,2,5,10,11], 12) 69 | print(result) -------------------------------------------------------------------------------- /31-40/37. Sudoku Solver.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def _sub_solveSudoku(self, board, cur_fill_x, cur_fill_y, row_list, col_list, rect_list): 3 | 4 | all_filled = False 5 | next_x, next_y = cur_fill_x, cur_fill_y + 1 6 | while next_y < 9: 7 | if board[next_x][next_y] == '.': 8 | break 9 | next_y += 1 10 | if next_y >= 9: 11 | for x in range(cur_fill_x + 1, 9): 12 | for y in range(9): 13 | if board[x][y] == '.': 14 | next_x = x 15 | next_y = y 16 | break 17 | if next_y < 9: break 18 | if next_y >= 9: all_filled = True 19 | 20 | for i in range(1, 10): 21 | if row_list[cur_fill_x][i] != 1 and col_list[cur_fill_y][i] != 1 and rect_list[cur_fill_x // 3][cur_fill_y // 3][i] != 1: 22 | board[cur_fill_x][cur_fill_y] = str(i) 23 | row_list[cur_fill_x][i] = 1 24 | col_list[cur_fill_y][i] = 1 25 | rect_list[cur_fill_x // 3][cur_fill_y // 3][i] = 1 26 | 27 | if all_filled == True: return board 28 | result = self._sub_solveSudoku(board, next_x, next_y, row_list, col_list, rect_list) 29 | if result != None: return result 30 | 31 | board[cur_fill_x][cur_fill_y] = '.' 32 | row_list[cur_fill_x][i] = 0 33 | col_list[cur_fill_y][i] = 0 34 | rect_list[cur_fill_x // 3][cur_fill_y // 3][i] = 0 35 | return None 36 | 37 | def solveSudoku(self, board): 38 | """ 39 | :type board: List[List[str]] 40 | :rtype: None Do not return anything, modify board in-place instead. 41 | """ 42 | row_list = [[0 for __ in range(10)] for _ in range(9)] 43 | col_list = [[0 for __ in range(10)] for _ in range(9)] 44 | rect_list = [[[0 for ___ in range(10)] for __ in range(3)] for _ in range(3)] 45 | 46 | for i in range(9): 47 | for j in range(9): 48 | if board[i][j] != '.': 49 | row_list[i][int(board[i][j])] = 1 50 | col_list[j][int(board[i][j])] = 1 51 | rect_list[i // 3][j // 3][int(board[i][j])] = 1 52 | 53 | filled_x, filled_y = 0, 0 54 | for i in range(9): 55 | for j in range(9): 56 | if board[i][j] == '.': 57 | filled_x = i 58 | filled_y = j 59 | break 60 | if board[filled_x][filled_y] == '.': break 61 | 62 | return self._sub_solveSudoku(board, filled_x, filled_y, row_list, col_list, rect_list) 63 | 64 | 65 | if __name__ == '__main__': 66 | result = Solution().solveSudoku( 67 | [ 68 | ["5", "3", ".", ".", "7", ".", ".", ".", "."], 69 | ["6", ".", ".", "1", "9", "5", ".", ".", "."], 70 | [".", "9", "8", ".", ".", ".", ".", "6", "."], 71 | ["8", ".", ".", ".", "6", ".", ".", ".", "3"], 72 | ["4", ".", ".", "8", ".", "3", ".", ".", "1"], 73 | ["7", ".", ".", ".", "2", ".", ".", ".", "6"], 74 | [".", "6", ".", ".", ".", ".", "2", "8", "."], 75 | [".", ".", ".", "4", "1", "9", ".", ".", "5"], 76 | [".", ".", ".", ".", "8", ".", ".", "7", "9"] 77 | ] 78 | ) 79 | for i in range(len(result)): 80 | print(result[i]) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | LeetCode Algorithm 2 | ======== 3 | 4 | | # | Title | Difficulty | pass | faster than | memory less than | 5 | |---| ----- | ---------- | ----- | ----------- | ---------------- | 6 | |1|[Two Sum](https://github.com/Dod-o/LeetCode/blob/master/1-10/1.Two_Sum.py) | Easy|100%| 94.29% | 97.01% | 7 | |2|[Add Two Numbers](https://github.com/Dod-o/LeetCode/blob/master/1-10/2.Add_Two_Numbers.py) | Medium|100%| 81.23% | 46.16% | 8 | |3|[Longest Substring Without Repeating Characters](https://github.com/Dod-o/LeetCode/blob/master/1-10/3.Longest_Substring_Without_Repeating_Characters.py) | Medium|100%| 27.85% | 65.74% | 9 | |4|[Median of Two Sorted Arrays ](https://github.com/Dod-o/LeetCode/blob/master/1-10/4.Median_of_Two_Sorted_Arrays.py) | Hard|100%| 49.62% | 13.81% | 10 | |5|[Longest_Palindromic_Substring](https://github.com/Dod-o/LeetCode/blob/master/1-10/5.Longest_Palindromic_Substring.py) | Medium|100%| 71.20% | 96.89% | 11 | |6|[ZigZag Conversion](https://github.com/Dod-o/LeetCode/blob/master/1-10/6.ZigZag_Conversion.py) | Medium|100%| 46.36% | 73.40% | 12 | |7|[Reverse Integer](https://github.com/Dod-o/LeetCode/blob/master/1-10/7.Reverse_Integer.py) | Easy|100%| 75.87% | 51.71% | 13 | |8|[String to Integer (atoi)](https://github.com/Dod-o/LeetCode/blob/master/1-10/8.String_to_Integer_(atoi).py) | Medium|100%| 69.07% | 93.85% | 14 | |9|[Palindrome Number](https://github.com/Dod-o/LeetCode/blob/master/1-10/9.Palindrome_Number.py) | Easy|100%| 72.01% | 54.91% | 15 | |10| Regular Expression Matching| Hard| NA| NA | NA | 16 | |11|[Container With Most Water](https://github.com/Dod-o/LeetCode/blob/master/11-20/11.Container_With_Most_Water.py) | Medium|100%| 89.85% | 89.38% | 17 | |12|[Integer to Roman](https://github.com/Dod-o/LeetCode/blob/master/11-20/12.Integer%20to%20Roman.py) | Medium|100%| 96.37% | 60.36% | 18 | |13|[Roman to Integer](https://github.com/Dod-o/LeetCode/blob/master/11-20/13.Roman_to_Integer.py) | Easy|100%| 19.97% | 82.06% | 19 | |14|[Longest Common Prefix](https://github.com/Dod-o/LeetCode/blob/master/11-20/14.Longest_Common_Prefix.py) | Easy|100%| 95.19% | 86.36% | 20 | |15|[3Sum](https://github.com/Dod-o/LeetCode/blob/master/11-20/15.3Sum.py) | Medium|100%| 53.45% | 72.00% | 21 | |16|[3Sum Closest](https://github.com/Dod-o/LeetCode/blob/master/11-20/16.3Sum_Closest.py) | Medium|100%| 99.32% | 55.94% | 22 | |17|[Letter Combinations of a Phone Number](https://github.com/Dod-o/LeetCode/blob/master/11-20/17.Letter_Combinations_of_a_Phone_Number.py) | Medium|100%| 84.69% | 82.70% | 23 | |18|[4Sum](https://github.com/Dod-o/LeetCode/blob/master/11-20/18.4Sum.py) | Medium|100%| 91.72% | 97.78% | 24 | |19|[Remove Nth Node From End of List](https://github.com/Dod-o/LeetCode/blob/master/11-20/19.Remove_Nth_Node_From_End_of_List.py) | Medium|100%| 81.09% | 37.66% | 25 | |20|[Valid Parentheses](https://github.com/Dod-o/LeetCode/blob/master/11-20/20.Valid_Parentheses.py) | Easy|100%| 90.98% | 45.17% | 26 | |21|[Merge Two Sorted Lists](https://github.com/Dod-o/LeetCode/blob/master/21-30/21.%20Merge_Two_Sorted_Lists.py) | Easy|100%| 95.34% | 61.16% | 27 | |22|[Generate Parentheses](https://github.com/Dod-o/LeetCode/blob/master/21-30/22.%20Generate_Parentheses.py) | Medium|100%| 85.24% | 84.59% | 28 | |23|[Generate Parentheses](https://github.com/Dod-o/LeetCode/blob/master/21-30/23.%20Merge_k_Sorted_Lists.py) | Hard|100%| 90.62% | 33.20% | 29 | |24|[Swap Nodes in Pairs](https://github.com/Dod-o/LeetCode/blob/master/21-30/24.%20Swap_Nodes_in_Pairs.py) | Medium|100%| 99.87% | 50.81% | 30 | |25|[Reverse Nodes in k-Group](https://github.com/Dod-o/LeetCode/blob/master/21-30/25.%20Reverse_Nodes_in_k-Group.py) | Hard|100%| 72.26% | 54.89% | 31 | |26|[Remove Duplicates from Sorted Array](https://github.com/Dod-o/LeetCode/blob/master/21-30/26.%20Remove_Duplicates_from_Sorted_Array.py) | Easy|100%| 62.26% | 92.52% | 32 | |27|[Remove Element](https://github.com/Dod-o/LeetCode/blob/master/21-30/27.%20Remove_Element.py) | Easy|100%| 48.15% | 70.71% | 33 | |28|[Implement strStr()](https://github.com/Dod-o/LeetCode/blob/master/21-30/28.%20Implement_strStr().py) | Easy|100%| 85.56% | 67.81% | 34 | |29|[Divide Two Integers](https://github.com/Dod-o/LeetCode/blob/master/21-30/29.%20Divide_Two_Integers.py) | Medium|100%| 51.85% | 97.37% | 35 | |30|[Substring with Concatenation of All Words](https://github.com/Dod-o/LeetCode/blob/master/21-30/30.%20Substring%20with%20Concatenation%20of%20All%20Words.py) | Hard|100%| 31.18% | 62.29% | 36 | |31|[Next Permutation](https://github.com/Dod-o/LeetCode/blob/master/31-40/31.%20Next%20Permutation.py) | Medium|100%| 93.52% | 37.16% | 37 | |32|[Longest Valid Parentheses](https://github.com/Dod-o/LeetCode/blob/master/31-40/32.%20Longest%20Valid%20Parentheses.py) | Hard|100%| 83.21% | 34.66% | 38 | |33|[Search in Rotated Sorted Array](https://github.com/Dod-o/LeetCode/blob/master/31-40/33.%20Search%20in%20Rotated%20Sorted%20Array.py) | Medium|100%| 47.34% | 81.96% | 39 | |34|[Find First and Last Position of Element in Sorted Array](https://github.com/Dod-o/LeetCode/blob/master/31-40/34.%20Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.py) | Medium|100%| 86.60% | 97.78% | 40 | |35|[Search Insert Position](https://github.com/Dod-o/LeetCode/blob/master/31-40/35.%20Search%20Insert%20Position.py) | Easy|100%| 98.87% | 76.67% | 41 | |36|[Valid Sudoku](https://github.com/Dod-o/LeetCode/blob/master/31-40/36.%20Valid%20Sudoku.py) | Medium|100%| 47.30% | 35.87% | 42 | |37|[Sudoku Solver](https://github.com/Dod-o/LeetCode/blob/master/31-40/37.%20Sudoku%20Solver.py) | Hard|100%| 92.58% | 47.74% | 43 | |38|[Count and Say](https://github.com/Dod-o/LeetCode/blob/master/31-40/38.%20Count%20and%20Say.py) | Easy|100%| 82.14% | 19.94% | 44 | ||[]() | |100%| 0.00% | 0.00% | 45 | ||[]() | |100%| 0.00% | 0.00% | 46 | ||[]() | |100%| 0.00% | 0.00% | 47 | ||[]() | |100%| 0.00% | 0.00% | 48 | ||[]() | |100%| 0.00% | 0.00% | 49 | ||[]() | |100%| 0.00% | 0.00% | 50 | ||[]() | |100%| 0.00% | 0.00% | 51 | ||[]() | |100%| 0.00% | 0.00% | 52 | ||[]() | |100%| 0.00% | 0.00% | 53 | ||[]() | |100%| 0.00% | 0.00% | 54 | ||[]() | |100%| 0.00% | 0.00% | 55 | ||[]() | |100%| 0.00% | 0.00% | 56 | ||[]() | |100%| 0.00% | 0.00% | 57 | ||[]() | |100%| 0.00% | 0.00% | 58 | ||[]() | |100%| 0.00% | 0.00% | 59 | ||[]() | |100%| 0.00% | 0.00% | 60 | ||[]() | |100%| 0.00% | 0.00% | 61 | ||[]() | |100%| 0.00% | 0.00% | 62 | ||[]() | |100%| 0.00% | 0.00% | 63 | ||[]() | |100%| 0.00% | 0.00% | 64 | ||[]() | |100%| 0.00% | 0.00% | 65 | 66 | -------------------------------------------------------------------------------- /21-30/30. Substring with Concatenation of All Words.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def sub_find_sub(self, s, words): 3 | if len(words) == 0: return True 4 | if len(words) == 1: 5 | if s[:len(words[0])] == words[0]: return True 6 | return False 7 | 8 | len_word = len(words[0]) 9 | for i in range(len(words)): 10 | if s[:len_word] == words[i]: 11 | cur_result = self.sub_find_sub(s[len_word:], words[:i] + words[i + 1:]) 12 | if cur_result == True: return True 13 | return False 14 | 15 | 16 | def findSubstring(self, s, words): 17 | """ 18 | :type s: str 19 | :type words: List[str]n 20 | :rtype: List[int] 21 | """ 22 | if len(words) == 0: return [] 23 | if len(words) * len(words[0]) > len(s): return [] 24 | 25 | 26 | words_dict = {} 27 | for i in range(len(words)): 28 | if words[i] in words_dict.keys(): words_dict[words[i]] += 1 29 | else: words_dict[words[i]] = 1 30 | 31 | final_result = [] 32 | len_sub = len(words) * len(words[0]) 33 | len_word = len(words[0]) 34 | for i in range(len(s) - len_sub + 1): 35 | window_words_dict = {key:0 for key, val in words_dict.items()} 36 | flag = True 37 | for j in range(i, i + len_sub, len_word): 38 | if s[j:j + len_word] in window_words_dict.keys(): 39 | window_words_dict[s[j:j + len_word]] += 1 40 | else: 41 | flag = False 42 | break 43 | if flag == True: 44 | all_right = True 45 | for key, val in words_dict.items(): 46 | if val != window_words_dict[key]: 47 | all_right = False 48 | break 49 | if all_right == True: 50 | final_result.append(i) 51 | return final_result 52 | 53 | 54 | 55 | 56 | if __name__ == '__main__': 57 | # print(Solution().findSubstring("barfoothefoobarman", ["foo","bar"])) 58 | print(Solution().findSubstring("abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab", ["ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba","ab","ba"])) -------------------------------------------------------------------------------- /31-40/32. Longest Valid Parentheses.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def longestValidParentheses(self, s): 3 | """ 4 | :type s: str 5 | :rtype: int 6 | """ 7 | if len(s) <= 1: return 0 8 | 9 | dp = [0 for i in range(len(s))] 10 | for i in range(1, len(s)): 11 | if s[i] == '(': continue 12 | if s[i - 1] == '(': 13 | if i - 2 >= 0: dp[i] = dp[i - 2] + 2 14 | else: 15 | dp[i] = 2 16 | else: 17 | if i - dp[i - 1] - 1 >= 0 and s[i - dp[i - 1] - 1] == '(': 18 | if i - dp[i - 1] - 2 >= 0: 19 | dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2 20 | else: 21 | dp[i] = dp[i - 1] + 2 22 | return max(dp) 23 | 24 | 25 | 26 | if __name__ == '__main__': 27 | print(Solution().longestValidParentheses("((())))()())))(((()()(())))((()(())()((()))())())())()())))))))(((()(())(()))(()()(()()((()))()(())(()(())))))()(())(()()(((()(()()))))((()()))))))()((()())()()))((())()((((()))()()()((()())))())((())))))))(()()((((((()))(((((((()()))((())()(()())()()()(()())(()())(())))()()))))()(((())(())(()())()))()(()))(())((()))))(())))()))((()((()(())(()()()()()))(())())()))))()(()(((())))()()()(((()((()))(()((((((())((()))(()(())(()))(())())))()()))))())(()((()()())()))((((()(()))()()))(()())))((()))(()((((()(())(())()((()))(()))())))(((()(())))((())()(()(((())))())())()()()())((()()))))))(()))(())()(((()))()()((()))(()))(((()))))))))(()(())())(()((())(()()))((())))(()())((((())))(()(()))())(((()(()((()(())((())())(()))(())))()()(())((()()))((()()((()()())())()))())()))())()))())(()(()))(()))()(())))((((())()())()()())((()())(()())(()()))()(())(())))))()()()((()(())(((()(())()()))(()()((()(((()))))))))(((()((()()((()(((((())((()((()((((((((())()))())((())((()((()(()((())(((()(()))())))))))))))))()((()(())())))()(()))(((()))())()(((()))))((()(())(()())(((()(((()((((())()))))(())((()(((((()((()(()()()()((()((((((((((((())()(()))()()(()())()(()(((()((()(()()()())))((())()))())()()))())(((()(())))))()()()(((())))((()(()(((())(())(()((((()(((()(())(((((())()))())())()()(()())((((()(())))((()())))))))))()(()(())))))))()))()())))((())(()()()()()()()(())(()())))))())((()()))))()))))((())((()(((()))))(((()()))()(()((()()())()))(((()(()((())(()(()(()()))()((()(())))()((())))))(())()(())()))((())(((((()))()())(())))((((()((())())(())))(())))))((())())())((((()((())))()()((()()()))()())())(()())(((()))()()))))(()(())(()))()())(()())(()))(((((((()(()))())()())()())((()(((((()())(((())))()())))(()(()(())()((())()))(())))())()))((((()))())((()))(())))))(()))))))(()))))(())))())()()())()()(())()()(((((()))(((()()))()(()((((()(()(()(())))())))())(()()())()(()))())(()()))(()()((()()))))))(())((()()))(())))())())(())((((()))))()))()))()()()))))((((()((())(()))(()()))(())()())(()())))(()(()(())((()())()((())(()))()))()))))((())))(())(()))()()()()()))((())(((()(())))(((((((()(()))(()))())()((()))(()(())((()((()((())))()()((())))))((((())()())(()()(((()()((()))()()((())))(((()())((((()(())())))())()()()(())()))))))()()((()))())(()(((()()))((())))())())())((((()(((()(())())()())((()((()(()((())()(()))()((())))()(()))))(((()))())())(()((()))))()()(((((()))())))(()(()(())((((())())))((()()())(((((((()(()(()))(())))))()))(()(((((())()))((()()()()((()))()(()()()()))(()))))())())()))()(()()(((())((()))(()())))((()()(((())())))))))(())))((()(()(((())((((()))))(()()()))))(((((((())(()(()))(()(())((())(()(()(()(()())(())()(())(()()(()(()))())(())()()(((()())(())(()(((()()(())()((((()()))())(((()(((((()())()(())))()))))(()(()()(()(()()(((()))()))((()())))()(()(())))))))())((((()()))(()))))()((()))(()))())()))()))))(()(())()()()))(((((()))()())())(()())())))()())))))()()()())))))(())(((()))((())((()()))))()((((()(()(()))))(()(())(((())(()()(((()(())()())(()()(()(()())))()())))(((()()((()())()()((()))()))(((()((((()(((()(((()(()())((()))))()(()())(())()(()(((())((()))(())()(())()(()(())()))())()))()())(()))))()))))((()()()((()(()()(())))())(())()(()()))))))))()((()))((((())))())))((()()()(()(()((((()((()))()()((())((())(()))))(())())(((()()(()))))))(()()))()))((()(()(())()))(((())()))(())(()((((()((()()()))()()))(()()(())())((((((())(())((()())()(()())))()))())(()()(()(()()()(()()()()))(()(()()())())((()()()(((()((()())()()((()()(()((()())()())()((()))(()((()())))))))(())((((())(((((())(((())(()))(((()((()()())()((()(()))()()()(()((((())))(())())))((())))(()(((((()()()((())((((((((()()((((())))())())())))))))(((()())(((()))())))()))((())())())))))))))(()()(((())))))(())()()))((())()))(()(()))((()(()((((()(()(((()))))()))(()(()))())())()()(((())())(((()))))(((()())))()(()())()())()))())())(()()(((()()))(())(((()((())((((())))))((()))))(()((()(())))()(())((()(())((()(()())())))()))))(())())(()())()()()((())))((()()))()()()((((()())))))()))))()))())()((()(())()()(())(((()((()))(()(()()))(()))()))))))))))))(()()))(((())((()(((()()()(()())((((()(()()()))())))())(()())))(()((((()))((()()())(((()))()())(()(()((()(()))))(())()()((()())((()(()(()))((()((()())(((()(((((()()()))(()()(()(((()(()())()()()))((()(()())))())(()(()))(())()())))()()()))()())(()(((((()))()()((((()()()()))()()(()((()))(()))))))))))()))()(()((((((())(()))()((())))(((((())))))(()))))()()(()()()(((((()))()())()((((()()))()(())())))(((()((())))))))))(()()()((()))(()())((())))()()((()())))()()(()))))))))()(((()(()))()())((((((())))(((()(()())())))(())())())()()((((()(()(((())(()()(((((()))(()(())()))))))()))()())))()()(()))(((()))()())))((())(((()()))((((((())))(((())()()(()((()))())(()((()()(((())())()))()()())())(()()((((((((())))()(((())(()))))()()())()(())))(((((()())(((())()()))))()((())())(())()(()(()()((()))()(()(((()))))()()())(())()()()(((()((()()()(()())())(())()(((((()())(())()((((()()()))()((())()((()(()(((()(()))()())())()())()(()()(()(((()))()(())(()())(())((())()((()()())(()))))()(()()))))((())()()((()((()()(()((()()())(())))))())))()))))(((((()(()())(()))((()))()(()())())())))()(()()(()((())))))()()))((())((((()))))())((()))())((())((()(()((()))()()()))()((((((())((((((()((((((((()))(()(((()(((((((((())(())())()())))))))())())))()))(()))))()(()))(())))()()()((()()))(())(()))(()()(()())))()(()()()()())))(())((((()))(((((())(()(((((())((()((((()))(((((()))(()())()))))())()))()(()()))((((()))()())(())))()((())))(((((()()((()()((()))))()((())())()))(((((((((()((())((((())()())))(())())()))())))())()))()(()()(()))(()()()((())((()))())))()(()())()(((((((()))))(()()()((()(())))())()))((())())(()(()(())()()())))))(()()()))())()))()())(((())(())))()(())())))()((()(()(())()()()((()))()))((())((((()((((((()()()))()))())())))))()(())(()())))()(((()())(((())))((())()()))((())())()()(()()())()))())(((()((()(((()())(()(())(((())))()))))))())()((((((()))))))()(()))()))())))())((((())(())()(())()))()))((((((((()()(())())((((())))((((()(())()()(())()))())()))(((()((()))()(((((()()()))))(()(()())))(((()(((()(())())((((())(()((()((()(()()(()()))()))()()))()))))))())()(())())))(((())))((()))((()(())())((())))((()))()))(((()))))(()())()())())()())))())))(())))(())())()((()())()()))((()()())(((((()())))())))()()()((((((())())()((())()))(()))()(()())()())(())()())((()((())(())()()()()((())(()())()()((())))()(((()(()(((((()(())))()(()))()(()))()))())()))()())()(()))))()()())(((())((()((())(()(()))()((()))))))(())(()(())())()()((())((())((((())))))(()()())(()()())(())())(((()()(())(())))()()))(())))))())(())()(((())())))((()(((())))(()((())()))()))((()()())()(((((())((((())))(())()()((()()(()()))(()((()))((())())))))))()())))())())((()(()()()()()))))()))((())(((((()())(()))((())))((()(())))))))))(((())(()(())(()(())((()((()))()((())())()())()((()(())())()(((()()((()(()())))))())((())(((()())(((()(()((())((()(((())(()()((((((()))())))())(()(()(()()())())((()))((())(())(())())))()(()())()))())(())((((())()((())))))(()()((())(((((()))()()))()()())(()(((()))())()()()))(((()()))(()(()((())(())))()()((((()()))()(())()())()()()()()(()()))(((())(((()()()((((((((((()()()(((()))))))())))()(((((((()((((((((()))()(((())())())())((((((()()))(()))()))))(())()())))())(()))(((())()()()((()()((())(()))((()(()())))()(()((()((())()()()()(())()()((())())())()()))()()))))((()()((())(((())(())())))((())())())(()))))())))))()((()(()(()))))()))((((())((())())(()))))()((()))(())((()()))()()((())(())())))(())))))()()(()())((()(())(((()((())))()())))()))()))))(())()(()))((()()()()))(())))(()()(())(((()(((()()))()((()))())()))(()(()))())))))))()((()(()))(((())())(())(()))(())(()((()))))))(()())(()()()(((()(((((()))((()))))(()))(())())(((()(()())(()()()()))())(()((()(()))()))())))(((()(()))))()))(()()((())())(()()())((()))(())))()()))(())))())))(()((())((()))((()))))())()()()((((((())((())()))(()))(())(())())))()())()((())))((()()())(()))(((()))())())))(())(())())()())()))((((()()()()))(())))((((())))(())(()((((()))())()))))))()()()))())))()((())))))((())())))()()(()()(()(()()()())((((())))(())(((())(()(()((((())(()()()(()(()((())(())(()())((((()((()((((((()((((())(((()())()((((()((())()(()(()(()((()()()(()(()())(((()(())(()(())(())(()))()((((((((()()(())))(()()(((())()(()(((((()())((()(())()())(((()(()(())()((((((((())()((()()((((())(((()(()((()((((()((((()(()(())())()(((()()))))))(()(((())()(((()())))((()))))(()()))))(()))))))((())())((())))()()()(()((()))()))()))()()()()()))(((((((()((()))((())()(()(()))()((((((((((((()(())))))(()())))()(()()(()(()()))))(((((()()((())()))())()()()))(())())()())()()((()()(()(()()(()))))))()()))(()()((()))))()((()()()())))(((()(((()()(())(())(()(((())(()((()(()))(()()((())()(()()())()))))))(()()((())((()())))(())(()))()(()))(()))()))()(())()(()())))(()))(()()(((()))))())))))((())())))))()()()))(()))((()())())()()))(((())((()((())()(()))()((()))()(())))))))()()())())))(()()(())(()))(())))))()(()))(()()))))))))((((()()()()()))(()))((()((())))(()())(((()()()(())))))()))()())())(()()()))))))((()())))((())))(())()((()))()(()())())))))(((()()(()(())()())(((((()))((()(())(())))))))()()))))))((()((((()()))()))(()()))(()()(())))))(((()()))(()())))(())()((()((()(((()()()()((()())())(()(((((((()((((())(()((((()()(())))))(()())))))(()())))())(())))((()(()))(()())(((())))((((())))))((()))()(((((((())())())((())))))))(()))))))))()((()()())((())))(())))((()(((()(())(())))()()()()))(())(()(())()())(())))()())((()((()((()()((())())))(()((())()()))()))((()()(()))(((((((()))((())((())((())()()((((((((()())()()()))(()()(((()(())()))()))()))()()(()(((((()))))((())(((()))()((((((((()()()()(()))()(()))()(())))))))()((((()()((()(())()((()))((()()(()()))))))))))(())(()))()()((((())))()((())(()((()((()(())()))()()((((()))))()))())))))())(((()()))()))()(()))(()))()((()((((((())())))()))()((())(()(())))))))()))(()()()())())()))((()))(()((()((()())))))((((())()()())(())())()((()((()())()())()(()))))((()())))()))()()))))()((())))())(()))()))(()((())(()))))()()))(()()((((()()))(((()()())(()(()(((()))())))((((()())()()()(())()()()((()))))((()()(()()))()())))(((((()(())())))))(()))))())))(())())()))))((()))))))(((())(((())()(((())))(()))()())(((()(()(((()))))()(()()(())())))))())())()()((())))()(())((()))((())(()())(()()()(()()())((())())))))((()(()())()()))))(()()(()()()(()()))((((((()))(()())(())(())())((())(()(()))((()()(()))))()))()(())))())))())(()((())))((())(()()()(()))((()((((((()())()()))))()))((()((())()))()((((()()()(((())())))()()()())())())(()())()))()(())(())()))())((()(((((()))(())(((((()))(()())(()(()(())()((()(()(()))()(()))))()(((())(()((((((()))(()(((()()())()())((()())))((()((()())()((((((())()))(()))))(()()()()))())())((((((((())((((()()()))(())()()))(()(()()(()(()))))(()))(()()()(())()()(())(()))())((()()((()(()))()))))())((()())())(((((()(()()))((()()()))()()(()(()(((()())(((((((((()))()())(()(()(())(((((()()))))(()())(()())())(())))))((()))())(((()((((()))()))(()(()(((()()(()(((()()))(())))((((()(()()))))((((()()())()))())()))))((())((((((())()()))()))()(((()((())(()((((()())())((((((((((()(((((()())()()(()))))))()((((())())(((()()((((()()())()(((((())))()))(())())(((()(((())()))()()()()(())))(()(((()(()))())))()(((()()()()()(()(((()(((()))()(())(())()()))()((()))))))()(((((()(()()((())(())((())))()(()())(())))())((())(()(()()(((())((()()(()()((()))))())))()(()))()))))))())())))((((((()())))(())(()))()()))()(())))))))((()))(()()()()))()())()()()()))()()())))))))((())(())))(()))(())((()())))(()(((()))((((())())))(())((())())))))(((()())(())()(())))((()()()((()(()))()))(())))((()(()()((()()()))((()))((()))()))(()())()()(((((((((()(()))()())()((())((((((((()(())()(((()((())()((((((((()))())))(()((()((())())())((()()())))(()(()((((((()))))((((())))((()()(())()())()()())(())(((()(()()(())(((())((((())()()(()()(((())()(())((()(()(((()(()())))()))((()()())(())))))(()(()))()))()(()))))(()((()))()())(())(())(()))((()())()))())()())((((()))))())())(((()))(((()()((()((())(())()()))))(((()((((()(((((((((())()()()(())((()(()()(()()(()()(())()())(((((()))))()(())(((()((((()())(()(((()))))()))())((((()()((()(()))))((())(())(()(()))()()(((()))(((((((((()())))((())()(()(((((((()))))))()()(())(((()(()())()()))((()()))((((()(())())))((()())))))()))))))))()()(((())())((()))())((())((()()))())((((((((())((()((())())))))()()))))))()()(())))))()))()()(((()))))(())((((()()()()))((()((((()()(())(((((()())()))))))())())()((((((((((()))()))((()))(())())(()(()(())((()()(()((())(())((((())(()()(()((()((()(((((()(()()((((())(())())(()()())()())((()(())()(())()))))")) 28 | # print(Solution().longestValidParentheses("(()())")) 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /11-20/15.3Sum.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def twoSum(self, nums, target): 3 | result = [] 4 | left, right = 0, len(nums) - 1 5 | while left < right: 6 | if target < 0 and (nums[left] > 0 and nums[right] > 0): 7 | return result 8 | if target > 0 and (nums[left] < 0 and nums[right] < 0): 9 | return result 10 | 11 | if nums[left] + nums[right] < target: 12 | left += 1 13 | elif nums[left] + nums[right] > target: 14 | right -= 1 15 | else: 16 | result.append([nums[left], nums[right]]) 17 | left += 1 18 | right -= 1 19 | while left < right and nums[left] == nums[left - 1]: left += 1 20 | while left < right and nums[right] == nums[right + 1]: right -= 1 21 | 22 | return result 23 | 24 | def threeSum(self, nums): 25 | """ 26 | :type nums: List[int] 27 | :rtype: List[List[int]] 28 | """ 29 | if len(nums) < 3: return [] 30 | if len(nums) == 3: 31 | if sum(nums) == 0: return [nums] 32 | return [] 33 | 34 | result = [] 35 | nums = sorted(nums) 36 | if nums[0] > 0 or nums[-1] < 0: return [] 37 | 38 | for first in range(0, len(nums) - 2): 39 | if first > 0 and nums[first] == nums[first - 1]: continue 40 | if nums[first] > 0: break 41 | 42 | target = 0 - nums[first] 43 | cur_result = self.twoSum(nums[first + 1:], target) 44 | if len(cur_result) != 0: 45 | for i in range(len(cur_result)): 46 | result.append([nums[first]] + cur_result[i]) 47 | 48 | # # result = set(result) 49 | # final_result = [] 50 | # for i in range(len(result)): 51 | # if result[i] not in final_result: 52 | # final_result.append(result[i]) 53 | # return final_result 54 | return result 55 | 56 | 57 | 58 | 59 | 60 | if __name__ == '__main__': 61 | s = Solution() 62 | result = s.threeSum([82597,-9243,62390,83030,-97960,-26521,-61011,83390,-38677,12333,75987,46091,83794,19355,-71037,-6242,-28801,324,1202,-90885,-2989,-95597,-34333,35528,5680,89093,-90606,50360,-29393,-27012,53313,65213,99818,-82405,-41661,-3333,-51952,72135,-1523,26377,74685,96992,92263,15929,5467,-99555,-43348,-41689,-60383,-3990,32165,65265,-72973,-58372,12741,-48568,-46596,72419,-1859,34153,62937,81310,-61823,-96770,-54944,8845,-91184,24208,-29078,31495,65258,14198,85395,70506,-40908,56740,-12228,-40072,32429,93001,68445,-73927,25731,-91859,-24150,10093,-60271,-81683,-18126,51055,48189,-6468,25057,81194,-58628,74042,66158,-14452,-49851,-43667,11092,39189,-17025,-79173,13606,83172,92647,-59741,19343,-26644,-57607,82908,-20655,1637,80060,98994,39331,-31274,-61523,91225,-72953,13211,-75116,-98421,-41571,-69074,99587,39345,42151,-2460,98236,15690,-52507,-95803,-48935,-46492,-45606,-79254,-99851,52533,73486,39948,-7240,71815,-585,-96252,90990,-93815,93340,-71848,58733,-14859,-83082,-75794,-82082,-24871,-15206,91207,-56469,-93618,67131,-8682,75719,87429,-98757,-7535,-24890,-94160,85003,33928,75538,97456,-66424,-60074,-8527,-28697,-22308,2246,-70134,-82319,-10184,87081,-34949,-28645,-47352,-83966,-60418,-15293,-53067,-25921,55172,75064,95859,48049,34311,-86931,-38586,33686,-36714,96922,76713,-22165,-80585,-34503,-44516,39217,-28457,47227,-94036,43457,24626,-87359,26898,-70819,30528,-32397,-69486,84912,-1187,-98986,-32958,4280,-79129,-65604,9344,58964,50584,71128,-55480,24986,15086,-62360,-42977,-49482,-77256,-36895,-74818,20,3063,-49426,28152,-97329,6086,86035,-88743,35241,44249,19927,-10660,89404,24179,-26621,-6511,57745,-28750,96340,-97160,-97822,-49979,52307,79462,94273,-24808,77104,9255,-83057,77655,21361,55956,-9096,48599,-40490,-55107,2689,29608,20497,66834,-34678,23553,-81400,-66630,-96321,-34499,-12957,-20564,25610,-4322,-58462,20801,53700,71527,24669,-54534,57879,-3221,33636,3900,97832,-27688,-98715,5992,24520,-55401,-57613,-69926,57377,-77610,20123,52174,860,60429,-91994,-62403,-6218,-90610,-37263,-15052,62069,-96465,44254,89892,-3406,19121,-41842,-87783,-64125,-56120,73904,-22797,-58118,-4866,5356,75318,46119,21276,-19246,-9241,-97425,57333,-15802,93149,25689,-5532,95716,39209,-87672,-29470,-16324,-15331,27632,-39454,56530,-16000,29853,46475,78242,-46602,83192,-73440,-15816,50964,-36601,89758,38375,-40007,-36675,-94030,67576,46811,-64919,45595,76530,40398,35845,41791,67697,-30439,-82944,63115,33447,-36046,-50122,-34789,43003,-78947,-38763,-89210,32756,-20389,-31358,-90526,-81607,88741,86643,98422,47389,-75189,13091,95993,-15501,94260,-25584,-1483,-67261,-70753,25160,89614,-90620,-48542,83889,-12388,-9642,-37043,-67663,28794,-8801,13621,12241,55379,84290,21692,-95906,-85617,-17341,-63767,80183,-4942,-51478,30997,-13658,8838,17452,-82869,-39897,68449,31964,98158,-49489,62283,-62209,-92792,-59342,55146,-38533,20496,62667,62593,36095,-12470,5453,-50451,74716,-17902,3302,-16760,-71642,-34819,96459,-72860,21638,47342,-69897,-40180,44466,76496,84659,13848,-91600,-90887,-63742,-2156,-84981,-99280,94326,-33854,92029,-50811,98711,-36459,-75555,79110,-88164,-97397,-84217,97457,64387,30513,-53190,-83215,252,2344,-27177,-92945,-89010,82662,-11670,86069,53417,42702,97082,3695,-14530,-46334,17910,77999,28009,-12374,15498,-46941,97088,-35030,95040,92095,-59469,-24761,46491,67357,-66658,37446,-65130,-50416,99197,30925,27308,54122,-44719,12582,-99525,-38446,-69050,-22352,94757,-56062,33684,-40199,-46399,96842,-50881,-22380,-65021,40582,53623,-76034,77018,-97074,-84838,-22953,-74205,79715,-33920,-35794,-91369,73421,-82492,63680,-14915,-33295,37145,76852,-69442,60125,-74166,74308,-1900,-30195,-16267,-60781,-27760,5852,38917,25742,-3765,49097,-63541,98612,-92865,-30248,9612,-8798,53262,95781,-42278,-36529,7252,-27394,-5021,59178,80934,-48480,-75131,-54439,-19145,-48140,98457,-6601,-51616,-89730,78028,32083,-48904,16822,-81153,-8832,48720,-80728,-45133,-86647,-4259,-40453,2590,28613,50523,-4105,-27790,-74579,-17223,63721,33489,-47921,97628,-97691,-14782,-65644,18008,-93651,-71266,80990,-76732,-47104,35368,28632,59818,-86269,-89753,34557,-92230,-5933,-3487,-73557,-13174,-43981,-43630,-55171,30254,-83710,-99583,-13500,71787,5017,-25117,-78586,86941,-3251,-23867,-36315,75973,86272,-45575,77462,-98836,-10859,70168,-32971,-38739,-12761,93410,14014,-30706,-77356,-85965,-62316,63918,-59914,-64088,1591,-10957,38004,15129,-83602,-51791,34381,-89382,-26056,8942,5465,71458,-73805,-87445,-19921,-80784,69150,-34168,28301,-68955,18041,6059,82342,9947,39795,44047,-57313,48569,81936,-2863,-80932,32976,-86454,-84207,33033,32867,9104,-16580,-25727,80157,-70169,53741,86522,84651,68480,84018,61932,7332,-61322,-69663,76370,41206,12326,-34689,17016,82975,-23386,39417,72793,44774,-96259,3213,79952,29265,-61492,-49337,14162,65886,3342,-41622,-62659,-90402,-24751,88511,54739,-21383,-40161,-96610,-24944,-602,-76842,-21856,69964,43994,-15121,-85530,12718,13170,-13547,69222,62417,-75305,-81446,-38786,-52075,-23110,97681,-82800,-53178,11474,35857,94197,-58148,-23689,32506,92154,-64536,-73930,-77138,97446,-83459,70963,22452,68472,-3728,-25059,-49405,95129,-6167,12808,99918,30113,-12641,-26665,86362,-33505,50661,26714,33701,89012,-91540,40517,-12716,-57185,-87230,29914,-59560,13200,-72723,58272,23913,-45586,-96593,-26265,-2141,31087,81399,92511,-34049,20577,2803,26003,8940,42117,40887,-82715,38269,40969,-50022,72088,21291,-67280,-16523,90535,18669,94342,-39568,-88080,-99486,-20716,23108,-28037,63342,36863,-29420,-44016,75135,73415,16059,-4899,86893,43136,-7041,33483,-67612,25327,40830,6184,61805,4247,81119,-22854,-26104,-63466,63093,-63685,60369,51023,51644,-16350,74438,-83514,99083,10079,-58451,-79621,48471,67131,-86940,99093,11855,-22272,-67683,-44371,9541,18123,37766,-70922,80385,-57513,-76021,-47890,36154,72935,84387,-92681,-88303,-7810,59902,-90,-64704,-28396,-66403,8860,13343,33882,85680,7228,28160,-14003,54369,-58893,92606,-63492,-10101,64714,58486,29948,-44679,-22763,10151,-56695,4031,-18242,-36232,86168,-14263,9883,47124,47271,92761,-24958,-73263,-79661,-69147,-18874,29546,-92588,-85771,26451,-86650,-43306,-59094,-47492,-34821,-91763,-47670,33537,22843,67417,-759,92159,63075,94065,-26988,55276,65903,30414,-67129,-99508,-83092,-91493,-50426,14349,-83216,-76090,32742,-5306,-93310,-60750,-60620,-45484,-21108,-58341,-28048,-52803,69735,78906,81649,32565,-86804,-83202,-65688,-1760,89707,93322,-72750,84134,71900,-37720,19450,-78018,22001,-23604,26276,-21498,65892,-72117,-89834,-23867,55817,-77963,42518,93123,-83916,63260,-2243,-97108,85442,-36775,17984,-58810,99664,-19082,93075,-69329,87061,79713,16296,70996,13483,-74582,49900,-27669,-40562,1209,-20572,34660,83193,75579,7344,64925,88361,60969,3114,44611,-27445,53049,-16085,-92851,-53306,13859,-33532,86622,-75666,-18159,-98256,51875,-42251,-27977,-18080,23772,38160,41779,9147,94175,99905,-85755,62535,-88412,-52038,-68171,93255,-44684,-11242,-104,31796,62346,-54931,-55790,-70032,46221,56541,-91947,90592,93503,4071,20646,4856,-63598,15396,-50708,32138,-85164,38528,-89959,53852,57915,-42421,-88916,-75072,67030,-29066,49542,-71591,61708,-53985,-43051,28483,46991,-83216,80991,-46254,-48716,39356,-8270,-47763,-34410,874,-1186,-7049,28846,11276,21960,-13304,-11433,-4913,55754,79616,70423,-27523,64803,49277,14906,-97401,-92390,91075,70736,21971,-3303,55333,-93996,76538,54603,-75899,98801,46887,35041,48302,-52318,55439,24574,14079,-24889,83440,14961,34312,-89260,-22293,-81271,-2586,-71059,-10640,-93095,-5453,-70041,66543,74012,-11662,-52477,-37597,-70919,92971,-17452,-67306,-80418,7225,-89296,24296,86547,37154,-10696,74436,-63959,58860,33590,-88925,-97814,-83664,85484,-8385,-50879,57729,-74728,-87852,-15524,-91120,22062,28134,80917,32026,49707,-54252,-44319,-35139,13777,44660,85274,25043,58781,-89035,-76274,6364,-63625,72855,43242,-35033,12820,-27460,77372,-47578,-61162,-70758,-1343,-4159,64935,56024,-2151,43770,19758,-30186,-86040,24666,-62332,-67542,73180,-25821,-27826,-45504,-36858,-12041,20017,-24066,-56625,-52097,-47239,-90694,8959,7712,-14258,-5860,55349,61808,-4423,-93703,64681,-98641,-25222,46999,-83831,-54714,19997,-68477,66073,51801,-66491,52061,-52866,79907,-39736,-68331,68937,91464,98892,910,93501,31295,-85873,27036,-57340,50412,21,-2445,29471,71317,82093,-94823,-54458,-97410,39560,-7628,66452,39701,54029,37906,46773,58296,60370,-61090,85501,-86874,71443,-72702,-72047,14848,34102,77975,-66294,-36576,31349,52493,-70833,-80287,94435,39745,-98291,84524,-18942,10236,93448,50846,94023,-6939,47999,14740,30165,81048,84935,-19177,-13594,32289,62628,-90612,-542,-66627,64255,71199,-83841,-82943,-73885,8623,-67214,-9474,-35249,62254,-14087,-90969,21515,-83303,94377,-91619,19956,-98810,96727,-91939,29119,-85473,-82153,-69008,44850,74299,-76459,-86464,8315,-49912,-28665,59052,-69708,76024,-92738,50098,18683,-91438,18096,-19335,35659,91826,15779,-73070,67873,-12458,-71440,-46721,54856,97212,-81875,35805,36952,68498,81627,-34231,81712,27100,-9741,-82612,18766,-36392,2759,41728,69743,26825,48355,-17790,17165,56558,3295,-24375,55669,-16109,24079,73414,48990,-11931,-78214,90745,19878,35673,-15317,-89086,94675,-92513,88410,-93248,-19475,-74041,-19165,32329,-26266,-46828,-18747,45328,8990,-78219,-25874,-74801,-44956,-54577,-29756,-99822,-35731,-18348,-68915,-83518,-53451,95471,-2954,-13706,-8763,-21642,-37210,16814,-60070,-42743,27697,-36333,-42362,11576,85742,-82536,68767,-56103,-63012,71396,-78464,-68101,-15917,-11113,-3596,77626,-60191,-30585,-73584,6214,-84303,18403,23618,-15619,-89755,-59515,-59103,-74308,-63725,-29364,-52376,-96130,70894,-12609,50845,-2314,42264,-70825,64481,55752,4460,-68603,-88701,4713,-50441,-51333,-77907,97412,-66616,-49430,60489,-85262,-97621,-18980,44727,-69321,-57730,66287,-92566,-64427,-14270,11515,-92612,-87645,61557,24197,-81923,-39831,-10301,-23640,-76219,-68025,92761,-76493,68554,-77734,-95620,-11753,-51700,98234,-68544,-61838,29467,46603,-18221,-35441,74537,40327,-58293,75755,-57301,-7532,-94163,18179,-14388,-22258,-46417,-48285,18242,-77551,82620,250,-20060,-79568,-77259,82052,-98897,-75464,48773,-79040,-11293,45941,-67876,-69204,-46477,-46107,792,60546,-34573,-12879,-94562,20356,-48004,-62429,96242,40594,2099,99494,25724,-39394,-2388,-18563,-56510,-83570,-29214,3015,74454,74197,76678,-46597,60630,-76093,37578,-82045,-24077,62082,-87787,-74936,58687,12200,-98952,70155,-77370,21710,-84625,-60556,-84128,925,65474,-15741,-94619,88377,89334,44749,22002,-45750,-93081,-14600,-83447,46691,85040,-66447,-80085,56308,44310,24979,-29694,57991,4675,-71273,-44508,13615,-54710,23552,-78253,-34637,50497,68706,81543,-88408,-21405,6001,-33834,-21570,-46692,-25344,20310,71258,-97680,11721,59977,59247,-48949,98955,-50276,-80844,-27935,-76102,55858,-33492,40680,66691,-33188,8284,64893,-7528,6019,-85523,8434,-64366,-56663,26862,30008,-7611,-12179,-70076,21426,-11261,-36864,-61937,-59677,929,-21052,3848,-20888,-16065,98995,-32293,-86121,-54564,77831,68602,74977,31658,40699,29755,98424,80358,-69337,26339,13213,-46016,-18331,64713,-46883,-58451,-70024,-92393,-4088,70628,-51185,71164,-75791,-1636,-29102,-16929,-87650,-84589,-24229,-42137,-15653,94825,13042,88499,-47100,-90358,-7180,29754,-65727,-42659,-85560,-9037,-52459,20997,-47425,17318,21122,20472,-23037,65216,-63625,-7877,-91907,24100,-72516,22903,-85247,-8938,73878,54953,87480,-31466,-99524,35369,-78376,89984,-15982,94045,-7269,23319,-80456,-37653,-76756,2909,81936,54958,-12393,60560,-84664,-82413,66941,-26573,-97532,64460,18593,-85789,-38820,-92575,-43663,-89435,83272,-50585,13616,-71541,-53156,727,-27644,16538,34049,57745,34348,35009,16634,-18791,23271,-63844,95817,21781,16590,59669,15966,-6864,48050,-36143,97427,-59390,96931,78939,-1958,50777,43338,-51149,39235,-27054,-43492,67457,-83616,37179,10390,85818,2391,73635,87579,-49127,-81264,-79023,-81590,53554,-74972,-83940,-13726,-39095,29174,78072,76104,47778,25797,-29515,-6493,-92793,22481,-36197,-65560,42342,15750,97556,99634,-56048,-35688,13501,63969,-74291,50911,39225,93702,-3490,-59461,-30105,-46761,-80113,92906,-68487,50742,36152,-90240,-83631,24597,-50566,-15477,18470,77038,40223,-80364,-98676,70957,-63647,99537,13041,31679,86631,37633,-16866,13686,-71565,21652,-46053,-80578,-61382,68487,-6417,4656,20811,67013,-30868,-11219,46,74944,14627,56965,42275,-52480,52162,-84883,-52579,-90331,92792,42184,-73422,-58440,65308,-25069,5475,-57996,59557,-17561,2826,-56939,14996,-94855,-53707,99159,43645,-67719,-1331,21412,41704,31612,32622,1919,-69333,-69828,22422,-78842,57896,-17363,27979,-76897,35008,46482,-75289,65799,20057,7170,41326,-76069,90840,-81253,-50749,3649,-42315,45238,-33924,62101,96906,58884,-7617,-28689,-66578,62458,50876,-57553,6739,41014,-64040,-34916,37940,13048,-97478,-11318,-89440,-31933,-40357,-59737,-76718,-14104,-31774,28001,4103,41702,-25120,-31654,63085,-3642,84870,-83896,-76422,-61520,12900,88678,85547,33132,-88627,52820,63915,-27472,78867,-51439,33005,-23447,-3271,-39308,39726,-74260,-31874,-36893,93656,910,-98362,60450,-88048,99308,13947,83996,-90415,-35117,70858,-55332,-31721,97528,82982,-86218,6822,25227,36946,97077,-4257,-41526,56795,89870,75860,-70802,21779,14184,-16511,-89156,-31422,71470,69600,-78498,74079,-19410,40311,28501,26397,-67574,-32518,68510,38615,19355,-6088,-97159,-29255,-92523,3023,-42536,-88681,64255,41206,44119,52208,39522,-52108,91276,-70514,83436,63289,-79741,9623,99559,12642,85950,83735,-21156,-67208,98088,-7341,-27763,-30048,-44099,-14866,-45504,-91704,19369,13700,10481,-49344,-85686,33994,19672,36028,60842,66564,-24919,33950,-93616,-47430,-35391,-28279,56806,74690,39284,-96683,-7642,-75232,37657,-14531,-86870,-9274,-26173,98640,88652,64257,46457,37814,-19370,9337,-22556,-41525,39105,-28719,51611,-93252,98044,-90996,21710,-47605,-64259,-32727,53611,-31918,-3555,33316,-66472,21274,-37731,-2919,15016,48779,-88868,1897,41728,46344,-89667,37848,68092,-44011,85354,-43776,38739,-31423,-66330,65167,-22016,59405,34328,-60042,87660,-67698,-59174,-1408,-46809,-43485,-88807,-60489,13974,22319,55836,-62995,-37375,-4185,32687,-36551,-75237,58280,26942,-73756,71756,78775,-40573,14367,-71622,-77338,24112,23414,-7679,-51721,87492,85066,-21612,57045,10673,-96836,52461,-62218,-9310,65862,-22748,89906,-96987,-98698,26956,-43428,46141,47456,28095,55952,67323,-36455,-60202,-43302,-82932,42020,77036,10142,60406,70331,63836,58850,-66752,52109,21395,-10238,-98647,-41962,27778,69060,98535,-28680,-52263,-56679,66103,-42426,27203,80021,10153,58678,36398,63112,34911,20515,62082,-15659,-40785,27054,43767,-20289,65838,-6954,-60228,-72226,52236,-35464,25209,-15462,-79617,-41668,-84083,62404,-69062,18913,46545,20757,13805,24717,-18461,-47009,-25779,68834,64824,34473,39576,31570,14861,-15114,-41233,95509,68232,67846,84902,-83060,17642,-18422,73688,77671,-26930,64484,-99637,73875,6428,21034,-73471,19664,-68031,15922,-27028,48137,54955,-82793,-41144,-10218,-24921,-28299,-2288,68518,-54452,15686,-41814,66165,-72207,-61986,80020,50544,-99500,16244,78998,40989,14525,-56061,-24692,-94790,21111,37296,-90794,72100,70550,-31757,17708,-74290,61910,78039,-78629,-25033,73172,-91953,10052,64502,99585,-1741,90324,-73723,68942,28149,30218,24422,16659,10710,-62594,94249,96588,46192,34251,73500,-65995,-81168,41412,-98724,-63710,-54696,-52407,19746,45869,27821,-94866,-76705,-13417,-61995,-71560,43450,67384,-8838,-80293,-28937,23330,-89694,-40586,46918,80429,-5475,78013,25309,-34162,37236,-77577,86744,26281,-29033,-91813,35347,13033,-13631,-24459,3325,-71078,-75359,81311,19700,47678,-74680,-84113,45192,35502,37675,19553,76522,-51098,-18211,89717,4508,-82946,27749,85995,89912,-53678,-64727,-14778,32075,-63412,-40524,86440,-2707,-36821,63850,-30883,67294,-99468,-23708,34932,34386,98899,29239,-23385,5897,54882,98660,49098,70275,17718,88533,52161,63340,50061,-89457,19491,-99156,24873,-17008,64610,-55543,50495,17056,-10400,-56678,-29073,-42960,-76418,98562,-88104,-96255,10159,-90724,54011,12052,45871,-90933,-69420,67039,37202,78051,-52197,-40278,-58425,65414,-23394,-1415,6912,-53447,7352,17307,-78147,63727,98905,55412,-57658,-32884,-44878,22755,39730,3638,35111,39777,74193,38736,-11829,-61188,-92757,55946,-71232,-63032,-83947,39147,-96684,-99233,25131,-32197,24406,-55428,-61941,25874,-69453,64483,-19644,-68441,12783,87338,-48676,66451,-447,-61590,50932,-11270,29035,65698,-63544,10029,80499,-9461,86368,91365,-81810,-71914,-52056,-13782,44240,-30093,-2437,24007,67581,-17365,-69164,-8420,-69289,-29370,48010,90439,13141,69243,50668,39328,61731,78266,-81313,17921,-38196,55261,9948,-24970,75712,-72106,28696,7461,31621,61047,51476,56512,11839,-96916,-82739,28924,-99927,58449,37280,69357,11219,-32119,-62050,-48745,-83486,-52376,42668,82659,68882,38773,46269,-96005,97630,25009,-2951,-67811,99801,81587,-79793,-18547,-83086,69512,33127,-92145,-88497,47703,59527,1909,88785,-88882,69188,-46131,-5589,-15086,36255,-53238,-33009,82664,53901,35939,-42946,-25571,33298,69291,53199,74746,-40127,-39050,91033,51717,-98048,87240,36172,65453,-94425,-63694,-30027,59004,88660,3649,-20267,-52565,-67321,34037,4320,91515,-56753,60115,27134,68617,-61395,-26503,-98929,-8849,-63318,10709,-16151,61905,-95785,5262,23670,-25277,90206,-19391,45735,37208,-31992,-92450,18516,-90452,-58870,-58602,93383,14333,17994,82411,-54126,-32576,35440,-60526,-78764,-25069,-9022,-394,92186,-38057,55328,-61569,67780,77169,19546,-92664,-94948,44484,-13439,83529,27518,-48333,72998,38342,-90553,-98578,-76906,81515,-16464,78439,92529,35225,-39968,-10130,-7845,-32245,-74955,-74996,67731,-13897,-82493,33407,93619,59560,-24404,-57553,19486,-45341,34098,-24978,-33612,79058,71847,76713,-95422,6421,-96075,-59130,-28976,-16922,-62203,69970,68331,21874,40551,89650,51908,58181,66480,-68177,34323,-3046,-49656,-59758,43564,-10960,-30796,15473,-20216,46085,-85355,41515,-30669,-87498,57711,56067,63199,-83805,62042,91213,-14606,4394,-562,74913,10406,96810,-61595,32564,31640,-9732,42058,98052,-7908,-72330,1558,-80301,34878,32900,3939,-8824,88316,20937,21566,-3218,-66080,-31620,86859,54289,90476,-42889,-15016,-18838,75456,30159,-67101,42328,-92703,85850,-5475,23470,-80806,68206,17764,88235,46421,-41578,74005,-81142,80545,20868,-1560,64017,83784,68863,-97516,-13016,-72223,79630,-55692,82255,88467,28007,-34686,-69049,-41677,88535,-8217,68060,-51280,28971,49088,49235,26905,-81117,-44888,40623,74337,-24662,97476,79542,-72082,-35093,98175,-61761,-68169,59697,-62542,-72965,59883,-64026,-37656,-92392,-12113,-73495,98258,68379,-21545,64607,-70957,-92254,-97460,-63436,-8853,-19357,-51965,-76582,12687,-49712,45413,-60043,33496,31539,-57347,41837,67280,-68813,52088,-13155,-86430,-15239,-45030,96041,18749,-23992,46048,35243,-79450,85425,-58524,88781,-39454,53073,-48864,-82289,39086,82540,-11555,25014,-5431,-39585,-89526,2705,31953,-81611,36985,-56022,68684,-27101,11422,64655,-26965,-63081,-13840,-91003,-78147,-8966,41488,1988,99021,-61575,-47060,65260,-23844,-21781,-91865,-19607,44808,2890,63692,-88663,-58272,15970,-65195,-45416,-48444,-78226,-65332,-24568,42833,-1806,-71595,80002,-52250,30952,48452,-90106,31015,-22073,62339,63318,78391,28699,77900,-4026,-76870,-45943,33665,9174,-84360,-22684,-16832,-67949,-38077,-38987,-32847,51443,-53580,-13505,9344,-92337,26585,70458,-52764,-67471,-68411,-1119,-2072,-93476,67981,40887,-89304,-12235,41488,1454,5355,-34855,-72080,24514,-58305,3340,34331,8731,77451,-64983,-57876,82874,62481,-32754,-39902,22451,-79095,-23904,78409,-7418,77916]) 63 | print(result) --------------------------------------------------------------------------------