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

Bagaimana untuk menambah sifar pada elemen rentetan hirisan 2D

PHPz
PHPzke hadapan
2024-02-13 15:20:081118semak imbas

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]]
 
}

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
}

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

[[700 30 1] [20 9]]

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
}

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
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam