猿问

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

我一直在练习编码面试问题,这个当前的例子 产品总和与围棋。基本上,您需要获取一个嵌套数组并返回其乘积总和。


示例:[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


慕运维8079593
浏览 55回答 1
1回答

拉莫斯之舞

根据您的代码,“数组表示法”应转换为以下等式:[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}数组的总和始终乘以其嵌套级别。
随时随地看视频慕课网APP

相关分类

Go
我要回答