如何编写乘积和问题的测试用例

我正在尝试在我的主要函数中为以下代码编写一个测试用例,该代码用于查找嵌套数组的乘积和总和:


package main


import "fmt"


type SpecialArray []interface{}


func ProductSum(array SpecialArray) int {

        return helper(array, 1)

}


func helper(array SpecialArray, multiplier int) int {

        sum := 0

        for _, el := range array {

                if cast, ok := el.(SpecialArray); ok {

                        sum += helper(cast, multiplier + 1)

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

                        sum += cast

                }

        }

        return sum * multiplier


}

给定一个混合了整数和数组的嵌套数组,上面的代码应该返回所有元素的总和。嵌套数组中的元素将被相加,然后乘以它们的深度,即


[1, [2, 3], 2] = 1 + 2(2+3) + 2 = 13


我无法理解 SpecialArray []interface{} 类型。我的第一次尝试是在我的 main 函数中简单地定义一个嵌套切片,如下所示:


func main() {

        SpecialArray := [][]int{1, {2, 3}, 2}

        result := ProductSum(SpecialArray)

        fmt.Println(result)

}

但这是行不通的。我假设我需要用值初始化我的 SpecialArray 接口并将其传递给我的 ProductSum 函数。


jeck猫
浏览 102回答 1
1回答

翻阅古今

您非常接近但没有完全正确地获得数组文字语法:func main() {    special := SpecialArray{1, SpecialArray{2, 3}, 2}    result := ProductSum(special)    fmt.Println(result)}您的helper功能也很好,但您可以考虑使用类型开关:func helper(array SpecialArray, multiplier int) int {    sum := 0    for _, v := range array {        switch v := v.(type) {        case int:            sum += v        case SpecialArray:            sum += helper(v, multiplier+1)        default:            log.Fatalf("Unknown type: %T", v)        }    }    return sum * multiplier}顺便说一句,SpecialArray类型是切片而不是数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go