只要你的心是善良的
对错都是别人的事
前言
一天,在一辆公共汽车上有很多人,正在售票员卖票时,突然一个人放了一个屁,车上的人都感到呼吸不适,纷纷骂着这个不文明的人。
这时售票员大声喊:“谁没买票?”
一名乘客答:“刚放屁的那个人没买票”
这时一个人站起来大声嚷:“谁说我没买票”
小样,你还嘴硬
千呼万唤始出来,不抱琵琶还遮面
出来混,迟早是要还的 (/ω\)
1 思路分析
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
1.1 基本步骤
- 循环链表
- 不足补0
- 依次相加,补上进位
- 余数存表,满十进1
- 链表递增
- 结尾进1补1
- 返回链表
1.2 重点步骤
不足补0
2.1. 没有l,l.val为0
依次相加,补上进位
3.1. sum = l1.val + l2.val + addOne
2 代码片段
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function (l1, l2) {
let addOne = 0
let curr = new ListNode(0)
let head = curr
while (l1 || l2) {
// 不足补0
!l1 && (l1 = new ListNode(0))
!l2 && (l2 = new ListNode(0))
// 相加补位
const sum = l1.val + l2.val + addOne
curr.next = new ListNode(sum % 10)
addOne = Math.floor(sum / 10)
// 依次递增
l1 = l1.next
l2 = l2.next
curr = curr.next
}
// 结尾补1
addOne && (curr.next = new ListNode(1))
return head.next
}
3 技巧总结
1.ListNode
// a = []
l = new ListNode()
// a[0]
l.val
// a[1] = 1
l.next = new ListNode(1)
// a[i++]
l = l.next()
// a.forEach
while(l) {
do something
}
2.while循环
// 长度不一致
const a1 = [1,2,3]
const a2 = [1,2]
while(a1.length || a1.length) {
// 全部遍历
}
4 学以致用
对比版本号
/**
* @param {V1} 1.17.2356
* @param {V2} 1.18
* @return {Boolean}
*/
var compareVersion = function(V1, V2) {
if (V1 === V2) return false
const a1 = V1.split('.')
const a2 = V2.split('.')
// 循环补0
while (a1.length || a2.length) {
!a1[0] && (a1[0] = 0)
!a2[0] && (a2[0] = 0)
if (a1[0] === a2[0]) {
a1.shift()
a2.shift()
} else if (a1[0] - a2[0] > 0) {
return true
} else {
return false
}
}
}
万物皆有裂痕
那是光之来处 O(∩_∩)O