twoSum
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
python
01_twosum.pyview rawdef two_sum(nums, target): d = {} for i, num in enumerate(nums): if target - num in d: return d[target - num], i d[num] = i
go
01_twosum.goview rawfunc twoSum(nums []int, target int) []int { m := make(map[int]int) for i, num := range nums { complement := target - num if _, ok := m[complement]; ok { return []int{m[complement], i} } m[num] = i } return nil }
addTwoNumbers
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
python
02-addTwoNumbers.pyview rawfrom typing import Optional class ListNode: def __init__(self, value: int, next: Optional["ListNode"] = None) -> None: self.value = value self.next = next def show(self) -> None: tmp = self _s = "" while tmp: _s += "%d -> " % tmp.value tmp = tmp.next _s = _s.rstrip(" -> ") print(_s) def add_two_numbers(p1: ListNode, p2: ListNode) -> ListNode: carry = 0 head: Optional[ListNode] = None current = head while p1 or p2 or carry: n1 = n2 = 0 if p1: n1 = p1.value p1 = p1.next if p2: n2 = p2.value p2 = p2.next s = n1 + n2 + carry s, carry = s % 10, s // 10 if head is None: head = ListNode(s) current = head else: current.next = ListNode(s) current = current.next return head
go
02-addTwoNumbers.goview rawpackage base import ( "fmt" "strings" ) type ListNode struct { Value int Next *ListNode } func (h *ListNode) ShowNums() { s, tmp := "", h for tmp != nil { s += fmt.Sprintf("%d -> ", tmp.Value) tmp = tmp.Next } s = strings.TrimRight(s, " -> ") fmt.Println(s) } func AddTwoNumbers(p1 *ListNode, p2 *ListNode) (head *ListNode) { var tail *ListNode flag := 0 for p1 != nil || p2 != nil || flag != 0 { n1, n2 := 0, 0 if p1 != nil { n1 = p1.Value p1 = p1.Next } if p2 != nil { n2 = p2.Value p2 = p2.Next } sum := n1 + n2 + flag sum, flag = sum%10, sum/10 if head == nil { head = &ListNode{Value: sum} tail = head } else { tail.Next = &ListNode{Value: sum} tail = tail.Next } } return }