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 關注
- 109 瀏覽
添加回答
舉報