高質量程式碼(整理) python
阿新 • • 發佈:2018-12-30
題目:求整數次方
def power(base, exponent): if equal_zero(base) and exponent < 0: raise ZeroDivisionError ret = power_value(base, abs(exponent)) if exponent < 0: return 1.0 / ret else: return ret def equal_zero(num): if abs(num - 0.0) < 0.0000001: return True def power_value(base, exponent): if exponent == 0: return 1 if exponent == 1: return base ret = power_value(base, exponent >> 1) ret *= ret if exponent & 1 == 1: ret *= base return ret
題目:O(1)時間刪除連結串列結點
def delete_node(link, node): if node == link: # 只有一個結點 del node if node.next is None: # node是尾結點 while link: if link.next == node: link.next = None link = link.next else: node.val = node.next.val n_node = node.next node.next = n_node.next del n_node
題目:調整陣列,使奇數在偶數前
def reorder(nums, func): left, right = 0, len(nums) - 1 while left < right: while not func(nums[left]): left += 1 while func(nums[right]): right -= 1 if left < right: nums[left], nums[right] = nums[right], nums[left] def is_even(num): return (num & 1) == 0
題目:連結串列中倒數第k個結點
def last_kth(link, k):
if not link or k<=0:
return None
move = link
while move and k-1>=0:
move = move.next
k-=1
while move:
move = move.next
link = link.next
if k==0:
return link.val
return None
題目:反轉連結串列
def reverse_link(head):
if not head or not head.next:
return head
then = head.next
head.next = None
last = then.next
while then:
then.next = head
head = then
then = last
if then:
last = then.next
return head
題目:合併兩個排序的連結串列
def merge_link(head1, head2):
if not head1:
return head2
if not head2:
return head1
if head1.val <= head2.val:
ret = head1
ret.next = merge_link(head1.next, head2)
else:
ret = head2
ret.next = merge_link(head1, head2.next)
return ret
題目:樹的子結構
def sub_tree(tree1, tree2):
if tree1 and tree2:
if tree1.val == tree2.val:
return sub_tree(tree1.left, tree2.left) and sub_tree(tree1.right, tree2.right)
else:
return sub_tree(tree1.left, tree2) and sub_tree(tree1.right, tree2)
if not tree1 and tree2:
return False
return True