2、两数相加-cangjie

题目链接

2、两数相加

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int64
 *     public var next: ?ListNode
 *     public init() {
 *         val = 0
 *         next = None
 *     }
 *     public init(val: Int64) {
 *         this.val = val
 *         next = None
 *     }
 * }
 */

class Solution {
    func addTwoNumbers(l1: ?ListNode, l2: ?ListNode): ?ListNode {
        var p = l1
        var q = l2
        var needPlus1 = false
        var nextNeedPlus1 = false
        var res:ListNode = ListNode(0)
        var tmp:ListNode = res
        while(true){
            var needBreak = true
            var num:Int64 = 0
            if(p?.val != None){
                needBreak = false
                num += (p??throw Exception("222")).val
                p = (p??break).next
            }
            if(q?.val != None){
                needBreak = false
                num += (q??throw Exception("333")).val
                q = (q??break).next
            }
            if(nextNeedPlus1){
                needPlus1 = true
                nextNeedPlus1 = false
            }
            if(needPlus1){
                needPlus1 = false
                num += 1
            }
            if(num >= 10){
                nextNeedPlus1 = true
                num -= 10
            }

            if(needBreak){
                if(num != 0){
                    tmp.next = ListNode(1)
                    tmp = (tmp.next??throw Exception("444"))
                }
                break
            }
            tmp.next = ListNode(num)
            tmp = (tmp.next??throw Exception("555"))
            
        }


        return res.next
    }
}

遇到的问题

1、while循环不知道怎么写
官网给出的写法是
在这里插入图片描述
但是如果我直接写while(p <- None)会报错
在这里插入图片描述
也看不懂,所以采用类似线程的while(1)写法了
2、判断子节点是否为空
通过的写法是
if(p?.val != None)
和arkTS一样需要一下
如果想用next来判断,不知道怎么写,说是p和q的类型是Option,所以不匹配,然后if仅接受bool
在这里插入图片描述
3、num赋值
num += (p??throw Exception("222")).val
如果直接用num += p.val则会报错,还是那句话,p和q是option,所以需要用??来解构(华为官网文档
在这里插入图片描述

在这里插入图片描述

复杂度

时间复杂度 O(max(len(l1), len(l2)))
空间复杂度 O(1)(不算结果空间)

结果

https://leetcode.cn/problems/add-two-numbers/submissions/574515701

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值