【LeetCode】394、字符串解码

【LeetCode】394、字符串解码


一、递归: 嵌套类问题

1.1 递归: 嵌套类问题

// go
func decodeString(s string) string {
    // 如果遇到 嵌套括号的情况, 则递归
    // 可能连续多位数字, 则 通过 cur = cur * 10 + int(c - '0') 实现
    
    where := 0 // 全局变量, 记录嵌套过程已执行到的位置, 嵌套过程结束后从 where + 1 继续
    var f func(i int) string
    f = func(i int) string { // 处理 [ 内部的结果
        path := "" // 当前函数的处理结果
        cnt := 0 // 倍数, 如 3[a] 中的 3
        for i < len(s) && s[i] != ']' { // 字符串未遍历完 or 嵌套未结束
            c := s[i]
            if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') {
                path += string(c)
                i++
            } else if c >= '0' && c <= '9' {
                cnt = cnt * 10 + int(c - '0')
                i++
            } else { // 即 c == '[', 需开启嵌套
                path += strings.Repeat(f(i+1), cnt)
                cnt = 0 // 清理现场
                i = where + 1 // 上级继续从 嵌套结束的位置 之后继续, 即 where + 1
            }
        }
        where = i // 更新全局变量, 从而让嵌套的上级从 where + 1 处继续
        return path
    }
    return f(0)
}

参考左神: 嵌套类问题 递归思路

二、多语言解法

C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts

// cpp
// go 同上
# python
// rust
// js
// ts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值