我正在嘗試在我的主要函數中為以下代碼編寫一個測試用例,該代碼用于查找嵌套數組的乘積和總和: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 關注
- 128 瀏覽
添加回答
舉報
0/150
提交
取消