为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的递归编码问题:产品总和

Go中的递归编码问题:产品总和

Go
慕运维8079593 2022-09-19 10:17:25
我一直在练习编码面试问题,这个当前的例子 产品总和与围棋。基本上,您需要获取一个嵌套数组并返回其乘积总和。示例:[1,3,[2,[5],-3],7] = 1 + 3 + 2*(2-3) + 3*(5) + 7 = 24这也应该等于:1 + 3 + 2*(2) + 2*(-3) + 3*5 + 7 = 24但是,当我尝试在代码中实现此内容时,我只能获得第一个示例。func ProductSum(array []interface{}) int {    sum := productSum(array, 1)    fmt.Println(sum)    return sum}func productSum(array SpecialArray, multiplier int) int {    sum := 0    for _, el := range array {        if cast, ok := el.(SpecialArray); ok {            sum += productSum(cast, multiplier+1)        } else if cast, ok := el.(int); ok {            sum += cast        }    }    return sum * multiplier}如果我更改为 ,然后更改为 - ,则该函数无法按预期工作。我已经尝试过通过递归堆栈来处理这个问题,但仍然感到困惑。sum += castsum += cast * multiplierreturn sum * multiplierreturn sum
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

根据您的代码,“数组表示法”应转换为以下等式:


[1,3,[2,[5],-3],7] = 1*(1 + 3 + 2*(2 + 3 * (5) - 3) + 7) = 1 + 3 + 2*(2 - 3 + 15) + 7 = 11 + 14 * 2 = 39



[1,3,[2,[5],-3],7] = 1*(1 + 3 + 2*(2 + 3 * (5) - 3) + 7) = 1 + 3 + 2*(-1) + 6 * 5 + 7 = 11 - 2 + 30 = 39


在您的解释中,每个嵌套级别都会使乘数增加一。


你能粘贴这个练习的确切内容吗?


编辑:


要获得 24 个结果,您的代码应如下所示:


func ProductSum(array []interface{}) int {

    sum := productSum(array, 1)

    fmt.Println(sum)

    return sum

}


func productSum(array []interface{}, multiplier int) int {

    sum := 0

    for _, el := range array {

        if cast, ok := el.([]interface{}); ok {

            sum += productSum(cast, multiplier+1)

        } else if cast, ok := el.(int); ok {

            // Multiplier is applied only to integers in current slice.

            sum += multiplier * cast

        }

    }

    return sum

}

数组的总和始终乘以其嵌套级别。


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 54 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信