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

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

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

Go
jeck猫 2023-01-03 11:17:16
我正在尝试在我的主要函数中为以下代码编写一个测试用例,该代码用于查找嵌套数组的乘积和总和:package mainimport "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 函数。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

您非常接近但没有完全正确地获得数组文字语法:


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类型是切片而不是数组。


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

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