classSolution(object): deftwoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ n = len(nums) for i inrange(n): for j inrange(i+1,n): if nums[i] + nums[j] == target: return [i,j]
return []
现在还只会用双循环,哈希表还有待学习… 不过官方的哈希表做法也放上来吧:
1 2 3 4 5 6 7 8
classSolution: deftwoSum(self, nums: List[int], target: int) -> List[int]: hashtable = dict() for i, num inenumerate(nums): if target - num in hashtable: return [hashtable[target - num], i] hashtable[nums[i]] = i return []
if (result != Noneand result.next != None): tail = None while(result.next != None): second = result.next result.next = tail tail = result result = second result.next = tail return result
首先计算两个链表头节点的值的和,并将进位(如果有)存储在 add_next 中。然后创建一个新节点 result 来存储结果链表的头节点,并移动 l1 和 l2 到它们的下一个节点。
接下来,使用循环遍历链表 l1 和 l2,同时处理进位情况,直到其中一个链表遍历完。
在循环中,计算当前节点的值以及进位的和,并将结果添加到结果链表 result 中,同时更新进位 add_next,并将 l1 和 l2 移动到它们的下一个节点。
classSolution: deflongestPalindrome(self, s): n = len(s) if n < 2: return s max_len = 1 begin = 0 # dp[i][j] 表示 s[i..j] 是否是回文串 dp = [[False] * n for _ inrange(n)] for i inrange(n): dp[i][i] = True # 递推开始 # 先枚举子串长度 for L inrange(2, n + 1): # 枚举左边界,左边界的上限设置可以宽松一些 for i inrange(n): # 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得 j = L + i - 1 # 如果右边界越界,就可以退出当前循环 if j >= n: break if s[i] != s[j]: dp[i][j] = False else: if j - i < 3: dp[i][j] = True else: dp[i][j] = dp[i + 1][j - 1] # 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置 if dp[i][j] and j - i + 1 > max_len: max_len = j - i + 1 begin = i return s[begin:begin + max_len]