我正在尝试在我的主要函数中为以下代码编写一个测试用例,该代码用于查找嵌套数组的乘积和总和: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类型是切片而不是数组。
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消