Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk menambah sifar pada elemen rentetan hirisan 2D

Bagaimana untuk menambah sifar pada elemen rentetan hirisan 2D

PHPz
Lepaskan: 2024-02-13 15:20:08
ke hadapan
1185 orang telah melayarinya

Bagaimana untuk menambah sifar pada elemen rentetan hirisan 2D

Dalam pengaturcaraan PHP, memanipulasi rentetan adalah salah satu tugas biasa. Satu tugas biasa ialah menambah sifar pada elemen rentetan kepingan 2D. Dengan menambahkan sifar pada elemen rentetan, anda boleh memastikan bahawa panjang rentetan adalah konsisten dan memudahkan pemprosesan dan perbandingan seterusnya. Jadi, bagaimana untuk mencapai tugas ini? Di bawah, editor PHP Banana akan memperkenalkan anda secara terperinci cara menambah sifar pada elemen rentetan kepingan dua dimensi.

Kandungan soalan

Tugasnya ialah menambah sifar pada elemen rentetan kepingan 2D. Jadi input standard ialah [["7" "3" "1"]["2" "9"]] Saya perlu menambah sifar daripada elemen terakhir setiap kepingan kepada elemen pertama. Untuk setiap langkah, pembilang sifar ditambah dengan +1. Oleh itu, output standard dijangka menjadi [["700", "30", "1"]["20", "9"]].

Saya mencuba algoritma sedemikian tetapi tidak dapat jawapan yang diharapkan. Ini kod saya:

package main

import (
    "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]]
 
}
Salin selepas log masuk

Bagaimana saya boleh menukar kod saya untuk mendapatkan jawapan yang diharapkan?

Penyelesaian

Kiraan sifar mesti ditetapkan semula dalam setiap baris, jadi alihkan kod itu di dalam gelung pertama.

Julat juga bermula pada indeks 0 开始,并且您希望从行尾开始增加零,因此 counter 必须从 len(strs[i])-1 dan anda perlu mengurangkannya:

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
}
Salin selepas log masuk

Selepas membuat perubahan ini, outputnya ialah (cuba di pergi taman permainan):

[[700 30 1] [20 9]]
Salin selepas log masuk

Perhatikan bahawa jika anda mula memproses baris dari hujung, akhiran (sifar) untuk ditambahkan akan ditambah. Jadi anda boleh membuang strings.repeat() dengan mengekalkan dan "melanjutkan" akhiran sebelumnya:

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
}
Salin selepas log masuk

Keluaran ini adalah sama. Cubalah di pergi taman permainan.

Juga ambil perhatian bahawa tali boleh dihiris dan hasilnya berkongsi memori dengan tali yang dihiris. Jadi ia pantas dan tidak menghasilkan sampah! Anda boleh membina rentetan zeros panjang yang mengandungi hanya sifar, dan rentetan panjang ini boleh dihiris untuk mengandungi seberapa banyak sifar yang anda mahu lampirkan. Penyelesaian ini mengelakkan sebarang peruntukan rentetan dan penyatuan yang tidak perlu:

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
}
Salin selepas log masuk

Ini menghasilkan kandungan yang sama sekali lagi, sila cuba di go taman permainan.

Atas ialah kandungan terperinci Bagaimana untuk menambah sifar pada elemen rentetan hirisan 2D. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan