抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

踮起脚尖 另一种高度

twoSum

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

python

01_twosum.pyview raw
def 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 raw
func 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 raw
from 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 raw
package 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 }

评论