ARTS LeetCode 2:两数相加

173 阅读1分钟

继续刷LeetCode,做做脑力运动,今天继续使用go来做开发,随机刷了一道编号2的题:Add Two Numbers,中文名叫两数相加,难度:中等。

题目偏简单了,就当熟悉go语言规范了,循环结构和条件语句不熟悉。

官方一共1563个case,放一个最终结果吧

执行用时 : 8 ms, 在所有 Go 提交中击败了 93.47% 的用户 内存消耗 : 5 MB, 在所有 Go 提交中击败了 13.79% 的用户

详细信息参考这里 两数相加 - 提交记录 - 力扣 (LeetCode) ,内存占比有点出乎意料。

再去英文版检查一下

Runtime: 16 ms, faster than 19.73% of Go online submissions for Add Two Numbers. Memory Usage: 5 MB, less than 32.49% of Go online submissions for Add Two Numbers.

详细信息参考这里 Add Two Numbers - Submission Detail - LeetCode ,中国的提交数量是全球的22%左右。

package main

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
	var result *ListNode = new(ListNode)
	var i1, i2, r = l1, l2, result
	var p *ListNode
	var j = 0
	for i1 != nil || i2 != nil {
		if p != nil {
			p.Next = r
		}
		var s = j
		if i1 != nil {
			s += i1.Val
			i1 = i1.Next
		}
		if i2 != nil {
			s += i2.Val
			i2 = i2.Next
		}
		r.Val = s % 10
		j = s / 10

		i1 = i1.Next
		i2 = i2.Next
		p = r
		r = new(ListNode)
		r.Val = 0
	}
	if j > 0 {
		if p != nil {
			p.Next = r
		}
		r.Val = j
	}
	return result
}

这个题目不太好本地试验测试用例,暂时略过。

收获

主要是语法上的学习:

  • for loop
  • 条件语句
  • 指针

参考资料