classSolution(object): defreversePrint(self, head): """ :type head: ListNode :rtype: List[int] """ a = [] while head: stack.append(head.val) head = head.next return a[-1::-1]
与题解大致相同
剑指 Offer 24. 反转链表
我的答案
1 2 3 4 5 6 7 8 9 10 11 12
classSolution: defreverseList(self, head: ListNode) -> ListNode: if head == None: return head last = None while head.next: buf = copy.copy(head) buf.next = last last = buf head = head.next head.next = last return head
参考题解
1 2 3 4 5 6 7 8 9 10 11
classSolution: defreverseList(self, head: ListNode) -> ListNode: cur, pre = head, None while cur: cur.next, pre, cur = pre, cur, cur.next return pre
classSolution: defcopyRandomList(self, head: 'Node') -> 'Node': ifnot head: return cur = head # 1. 复制各节点,并构建拼接链表 while cur: tmp = Node(cur.val) tmp.next = cur.next cur.next = tmp cur = tmp.next # 2. 构建各新节点的 random 指向 cur = head while cur: if cur.random: cur.next.random = cur.random.next cur = cur.next.next # 3. 拆分两链表 cur = res = head.next pre = head while cur.next: pre.next = pre.next.next cur.next = cur.next.next pre = pre.next cur = cur.next pre.next = None# 单独处理原链表尾节点 return res # 返回新链表头节点
classSolution(object): defreplaceSpace(self, s): """ :type s: str :rtype: str """ result = '' for i in s: if i == ' ': result += '%20' else: result += i return result
classSolution: deffindRepeatNumber(self, nums: List[int]) -> int: answer = {} for i in nums: if answer.get(i,0) != 0: return i answer[i] = 1 return0
剑指 Offer 53 - I. 在排序数组中查找数字 I
我的答案
1 2 3 4 5 6
classSolution: defsearch(self, nums: List[int], target: int) -> int: answer = {} for i in nums: answer[i] = answer.get(i,0) + 1 return answer.get(target,0)
参考题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defsearch(self, nums: [int], target: int) -> int: defhelper(tar): i, j = 0, len(nums) - 1 while i <= j: m = (i + j) // 2 if nums[m] <= tar: i = m + 1 else: j = m - 1 return i return helper(target) - helper(target - 1)
classSolution: defmissingNumber(self, nums: List[int]) -> int: for i inrange(len(nums)): if nums[i] != i: return i return i+1
参考题解
1 2 3 4 5 6 7 8 9 10 11 12 13
classSolution: defmissingNumber(self, nums: List[int]) -> int: i, j = 0, len(nums) - 1 while i <= j: m = (i + j) // 2 if nums[m] == m: i = m + 1 else: j = m - 1 return i
classSolution: deflevelOrder(self, root: TreeNode) -> List[List[int]]: ifnot root: return [] result, q = [],collections.deque() q.append([0,root]) while q: deep,node = q.popleft() if deep < len(result): result[deep].append(node.val) else: result.append([node.val]) if node.left: q.append([deep+1,node.left]) if node.right: q.append([deep+1,node.right]) for i inrange(len(result)): if i % 2 != 0: result[i] = result[i][::-1] return result
classSolution: classSolution: defmaxProfit(self, prices: List[int]) -> int: result = 0 m1 = 10000000 m2 = -1 for i in prices: if i < m1: result = max(result, (m2 - m1)) m1 = i m2 = i if i > m2: m2 = i returnmax(result, (m2 - m1))