leetcode刷题之两数相加(go实现)
2019-07-03 16:15
363 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010110632/article/details/94570392
题目来自于LeetCode(https://leetcode-cn.com)。
1、给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
注:这道题有助于理解链表,帮助复习链表的操作
解法一:暴力法(耗时12 ms,内存5.7M,后期看能否优化)
先讲两个链表中的值取出来,分别存在slice中。比较两个slice的长度,进行调换(将长度长的赋值给a,端的给b)。循环相加,并将结果存入a中(这里设置了一个标杆 j ,用来表示上一轮循环是否大于等于10)。最后循环a,将结果一一放入到链表中(这里需要在里面取到链表的尾部)。
代码如下:
[code]/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { var a []int for { if l1 != nil{ a = append(a,l1.Val) l1 = l1.Next }else{ break } } var b []int for { if l2 != nil{ b = append(b,l2.Val) l2 = l2.Next }else{ break } } alen := len(a) blen := len(b) j := 0 //检测长度,符合条件,则交换变量值,并重新获得长度值 if alen < blen { a,b = b,a alen = len(a) blen = len(b) } for i:=0;i<blen;i++{ num := a[i] + b[i] + j if num >= 10 { a[i] = num - 10 j = 1 }else{ a[i] = num j = 0 } } for m:=blen;m<alen;m++{ num := a[m] + j if num >= 10 { a[m] = num -10 j = 1 }else{ a[m] = num j = 0 } } //最后接测j,大于0说明最后两个元素相加大于10 if j > 0{ a = append(a,1) } var l3 = &ListNode{Val:-1} l5 := l3 //这里赋值,因为是指针,所以l3的更改能体现到l5上,最后返回l5 for _,v := range a{ if l3.Val == -1{ l3.Val = v continue } var l4 = new(ListNode) l4.Val = v l4.Next = nil l3.Next = l4 l3 = l3.Next //将l3的指针指向链表尾部 } return l5 }
相关文章推荐
- LeetCode2. python实现:两数相加问题☆☆
- [算法Rust,Go,Python,JS实现)]LeetCode之01-两数之和
- leetcode算法题:两数相加(Java实现-效率超过100%提交者)
- leetcode 链表里的两数相加 C++实现
- LeetCode题目C++实现:2. 两数相加
- [算法Rust,Go,Python,JS实现)]LeetCode之14-最长公共前缀
- Leetcode(C++)——2. 两数相加
- leetCode 1号题详解, 两数之和的key , python3三种方法实现
- [算法Rust,Go,Python,JS实现)]LeetCode之27-移除元素
- LeetCode 2 --两数相加
- LeetCode-2 两数相加
- leetcode 2、两数相加
- leetcode刷题笔记-两数相加(1)
- leetcode刷题 golang实现 两数之和
- LeetCode---两数相加
- LeetCode刷题记: 两数相加
- leetcode2:两数相加
- [算法Rust,Go,Python,JS实现)]LeetCode之09-回文数
- LeetCode每日一题 009 两数相加
- leetcode-2-两数相加