如何为二维字符串切片的元素添加指定数量的后缀零?
修正Go代码实现二维切片元素按规则添加后缀零
需求说明
给二维字符串切片的元素添加后缀零,规则为:每个子切片从最后一个元素到第一个元素,添加的零的数量依次递增1。
- 输入:
[][]string{{"7", "3", "1"}, {"2", "9"}} - 预期输出:
[][]string{{"700", "30", "1"}, {"20", "9"}}
原代码问题分析
原代码逻辑不符合需求:
- 外层循环维护的
counter让每个子切片的所有元素添加相同数量的零,无法实现子切片内元素零数递增的要求 - 遍历子切片的顺序是从第一个到最后一个,没有对应“从后往前零数递增”的规则
修改后的代码
package main import ( "fmt" "strings" ) func addZero(strs [][]string) [][]string { // 创建新切片存储结果,避免修改原输入 result := make([][]string, len(strs)) for i, subSlice := range strs { subLen := len(subSlice) result[i] = make([]string, subLen) // 遍历子切片每个元素,计算需要添加的零数 for j := range subSlice { // 零数 = 子切片长度 - 1 - 当前索引,实现从第一个元素到最后一个元素零数递减(即反向递增) zeroCount := subLen - 1 - j result[i][j] = subSlice[j] + strings.Repeat("0", zeroCount) } } return result } func main() { input := [][]string{{"7", "3", "1"}, {"2", "9"}} fmt.Println(addZero(input)) // 输出:[[700 30 1] [20 9]] }
核心修改点
- 避免修改原输入:创建新的二维切片存储结果,保持函数无副作用,符合Go的最佳实践
- 正确计算零的数量:对于子切片中索引为
j的元素,零数为subLen - 1 - j,刚好满足:- 第一个元素(j=0):零数=子切片长度-1(比如长度为3的子切片,第一个元素加2个零)
- 最后一个元素(j=subLen-1):零数=0,无需添加零
- 逻辑简洁高效:无需反向遍历,通过索引计算即可实现需求中的规则
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

