Re: [闲聊] 每日LeetCode

楼主: yam276 ('_')   2023-10-05 18:02:10
2. Add Two Numbers
两个LinkedList 做从个位数开始的大数加法
思路:
以下都不是重点 重点是Rust操作指标真的很繁琐
从dummy_head的下一位开始存结果
while以此node当基准跑
每次先加上同index的l1跟l2的value
(已经没node的就不加)
有value可以加的话
加完l1 l2分别进next node
然后计算是否进位 建立并进入下一个结果node
Code:
impl Solution {
pub fn add_two_numbers(
mut l1: Option<Box<ListNode>>,
mut l2: Option<Box<ListNode>>,
) -> Option<Box<ListNode>> {
let mut dummy_head = Box::new(ListNode::new(0));
let mut cur = &mut dummy_head;
let mut carry = 0;
while l1.is_some() || l2.is_some() || carry != 0 {
let mut sum = carry
+ match l1 {
Some(node) => {
l1 = node.next;
node.val
}
None => 0,
}
+ match l2 {
Some(node) => {
l2 = node.next;
node.val
}
None => 0,
};
carry = sum / 10;
cur.next = Some(Box::new(ListNode::new(sum % 10)));
cur = cur.next.as_mut().unwrap();
}
dummy_head.next
}
}
作者: wwndbk (黑人问号)   2023-10-05 19:01:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com