亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將零添加到二維切片字符串元素

如何將零添加到二維切片字符串元素

Go
一只甜甜圈 2023-03-21 10:33:13
任務是將零添加到 2d 切片的字符串元素。所以標準輸入是 [["7" "3" "1"]["2" "9"]] 我需要將每個切片的最后一個元素的零添加到第一個元素。對于每一步,零計數器都會增加 +1。因此,標準輸出應為 [["700", "30", "1"]["20", "9"]]。我試過做這樣的算法,但得不到預期的答案。這是我的代碼:package mainimport (    "fmt"    "strings")func addZero(strs [][]string) [][]string {    zero := "0"    counter := 0    for i := range strs {        for j := range strs[i] {            strs[i][j] += strings.Repeat(zero, counter)        }        counter++    }    return strs}func main() {    fmt.Println(addZero([][]string{{"7", "3", "1"}, {"2", "9"}}))// here the result is [[7 3 1] [20 90]] }如何更改我的代碼以獲得預期的答案?
查看完整描述

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上嘗試。



查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號