1 回答
TA贡献1777条经验 获得超10个赞
计数零必须在每一行中重置,因此将该代码移到第一个循环中。
范围也从 index 开始0,并且您希望从行尾增加零,因此counter必须从 开始len(strs[i])-1,并且您必须递减它:
func addZero(strs [][]string) [][]string {
for i := range strs {
zero := "0"
counter := len(strs[i]) - 1
for j := range strs[i] {
strs[i][j] += strings.Repeat(zero, counter)
counter--
}
}
return strs
}
通过这些更改,输出将是(在Go Playground上尝试):
[[700 30 1] [20 9]]
请注意,如果您要从末尾开始处理行,则追加的后缀(零)会增加。所以你可以strings.Repeat()通过保留和“扩展”前面的后缀来放弃:
func addZero(strs [][]string) [][]string {
for _, line := range strs {
zeros := ""
for i := len(line) - 1; i >= 0; i-- {
line[i] += zeros
zeros += "0"
}
}
return strs
}
这输出相同。在Go Playground上尝试一下。
另请注意,字符串可以被切片,结果与切片字符串共享内存。所以它很快而且不会产生垃圾!您可以构建一个仅zeros包含零的长字符串,并且可以将这个长字符串切片以包含您需要追加的任意多个零。此解决方案避免了任何不必要的字符串分配和连接:
var zeros = strings.Repeat("0", 1000) // Use the maximum length here
func addZero(strs [][]string) [][]string {
for _, line := range strs {
count := len(line) - 1
for i := range line {
line[i] += zeros[:count-i]
}
}
return strs
}
这再次输出相同的结果,请在Go Playground上尝试。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报