


Menyalin tatasusunan dengan betul ialah isu penting apabila menggunakan algoritma penjejakan belakang di Golang. Algoritma penjejakan ke belakang biasanya memerlukan pengubahsuaian pada tatasusunan semasa proses rekursif, tetapi kadangkala kita perlu menyimpan keadaan tatasusunan asal untuk mengundur ke langkah sebelumnya. Dalam kes ini, kita tidak boleh hanya menetapkan tatasusunan asal terus kepada pembolehubah baharu kerana ia berkongsi ruang memori yang sama dan mengubah suai satu tatasusunan akan menjejaskan tatasusunan yang lain. Penyelesaian kepada masalah ini adalah dengan menggunakan salinan dalam, yang mencipta tatasusunan baharu dan menyalin nilai tatasusunan asal ke dalam tatasusunan baharu satu demi satu. Di Golang, operasi ini boleh dicapai menggunakan fungsi copy(), yang menyalin kandungan tatasusunan pada tahap bait untuk memastikan tatasusunan baharu benar-benar bebas daripada tatasusunan asal. Dengan menyalin tatasusunan dengan betul, kami boleh memanipulasi tatasusunan dengan selamat dalam algoritma penjejakan ke belakang tanpa menjejaskan keadaan data asal.
Kandungan soalan
Saya mempunyai tatasusunan ringkas dengan nilai [1, 2, 3] dan saya ingin mencari semua pilih atur. Saya tidak faham mengapa bahagian "salinan" kod dialihkan sebelum gelung memecahkan program.
func generatePermutations(curr, remains []int) [][]int { if len(remains) == 0 { return [][]int{curr} } var res [][]int // DOESN'T WORK c, r := make([]int, len(curr)), make([]int, len(remains)) copy(c, curr) copy(r, remains) for i := 0; i < len(remains); i++ { // WORKS //c, r := make([]int, len(curr)), make([]int, len(remains)) //copy(c, curr) //copy(r, remains) curr = append(curr, remains[i]) res = append(res, generatePermutations(curr, append(append(remains[:i]), remains[i+1:]...))...) curr = c remains = r } return res }
Apabila salinan berada di luar gelung, hasilnya adalah seperti berikut: [[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 3 3] [3 3 3]]
Apabila salinan berada di dalam gelung, hasilnya adalah seperti berikut: [[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]]
Dalam output pertama, terdapat dua tatasusunan dengan [3,3,3] yang salah
Penyelesaian
Anda berkata 我既不修改“c”或“r”也不附加到它们
, bahagian ini betul.
Dalam lelaran pertama gelung,
Kepingan c
和 curr
menghala ke tatasusunan sandaran yang berbeza, jadi tidak mengapa.
Tetapi apabila anda melakukannya
curr = c
Kemudian, anda sebenarnya menetapkan kedua-dua kepingan untuk menghala ke tatasusunan sandaran yang sama.
Ini bermakna pada lelaran kedua, tatasusunan sokongan append
可以修改 curr
和 curr
(“可以”,因为调整大小会更改 curr
anda).
Inilah yang menyebabkan tingkah laku pelik yang anda lihat di atas.
Potongan dalam perjalanan agak rumit, jadi apabila anda tahu anda akan menukar dan menyebarkannya, sebaiknya elakkan memberikannya dan sebaliknya terus menyalinnya dengan tepat (seperti yang anda lakukan dalam kes "kerja").
Untuk bacaan lanjut, berikut adalah sumber yang bagus: https://go.dev/blog/slices-introduction
Atas ialah kandungan terperinci Bagaimana untuk menyalin tatasusunan dengan betul apabila menggunakan algoritma penjejakan belakang di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

苹果在iOS17中新增了实时贴纸功能,可以让用户在图像中触摸并按住任何物体、人或宠物,然后将其转换为贴纸,以便在“消息”或其他支持的应用程序中使用。然而,如果您不喜欢这些贴纸,最好将其删除,以避免占用存储空间。如果您不知道如何删除,请不要担心,我将向您展示在iOS17中删除贴纸的步骤。注意:如果您从iPhone中删除贴纸,它们也会从其他同步的Apple设备中删除。如何从iPhone上的“消息”应用程序中删除贴纸打开iPhone上的消息应用。点击加号(+)按钮→选择贴纸从选项中选择。您保存的贴纸将

若您希望整理苹果Mac电脑上的文件和文件夹,您可以考虑移动一些内容。通过移动项目,您可以创建一个更有序的文件结构,以提高工作效率或更快地找到所需的内容。我们将向您展示在macOS上如何使用拖放、快捷方式或右键菜单、终端等来移动文件和文件夹,以便您可以使用更有意义或您最习惯使用的方法。方法1:在Mac上使用拖放在苹果Mac电脑上,最简单的移动文件和文件夹的方法是通过拖放操作。无论是重新排列桌面上的图标、小部件和快捷方式,还是将项目移动到macOS上的其他位置,这种方法都非常方便易用。1.在两个打开

如果您刚刚开始在Mac上进行视频编辑,那么您可能正在处理许多视频剪辑,以便将它们添加、组合和重新排列成一个视频。为了方便管理这么多文件,您需要使用视频编辑器将这些剪辑拼接成一个视频文件。在这篇文章中,我们将帮助您了解如何在Mac上将视频合并为一个文件。如何在Mac上合并视频[2种方法]这里有两种简单的方法可以在Mac上合并两个或多个视频剪辑。方法1:使用QuickTimePlayer应用程序Mac上预装的QuickTimePlayerApp具有基本和轻量级编辑所需的所有功能。虽然它没有像iMov

在iOS上的"文件"应用默认显示两个存储位置:iCloud云盘和"我的iPhone上"。此外,当您使用第三方存储应用如Google云端硬盘时,您还可以通过"文件"应用直接浏览这些存储服务中的文件。无论是存储在iCloud还是第三方应用中,"文件"应用提供了便捷的方式来管理和访问您的文件。这为用户带来了更大的灵活性和便利性,使他们能够轻松地浏览和组织他们的文件。无论您选择使用哪个存储服务,"文件"应用都为您提供了一个集中管理文件的地方,使您能够更高效地进行文件管理。本文将介绍如何在iPhone上将

MT管理器怎么去广告?MT管理器是一款非常好用的手机应用管理软件,还为用户们提供了一些应用程序管理服务。在MT管理器的帮助下,用户们可以自由修改应用中的布局,让它的广告被自动清除掉,获得无广告的使用体验。各位如果对此感兴趣的话,就随小编一起来看看MT管理器去广告教程吧。MT管理器怎么去广告1、打开一款软件观察一下软件中广告的位置在哪,这边看到广告在最底部2、打开开发助手,点开首页的第二排第一个的布局查看3、返回某圈兔首页查看布局排列,分为多个层面,需要自己点击,框出存在广告的窗口,抓取底部的广告

火狐浏览器如何添加书签工具栏?我们想要在火狐浏览器中添加书签工具栏要如何操作,下面介绍下!我们平时使用火狐浏览器上网的时候会收藏一些需要的书签,这样我们就可以随时使用,比较方便快捷。有些用户想要在火狐浏览器中添加书签工具栏应该如何添加,小编下面整理了火狐浏览器添加书签工具栏具体步骤,不会的话,跟着我一起往下看吧!火狐浏览器添加书签工具栏具体步骤1、首先点击火狐浏览器主界面右上角的按钮2、在下拉菜单栏中,点击更多工具。3、点击定制工具栏3、在定制工具栏中,选择要添加的工具图标然后拖动到右上角排列处

现在聊起“小屏手机”,你会想到些什么?是苹果在前两年发布的iPhone12/13mini?被称为小屏旗舰的小米13/14?还是三星谷歌的S系列以及Pixel系列的中杯?在我看来,当下这些被大伙儿冠以小屏之名的手机,在体积上其实并没有很小。比如把iPhone13mini和早期的iPhone3G摆在一起,谁是“大屏手机”,一目了然。要知道iPhone3G推出的时候,大家都是在夸它的“3.5英寸大屏”,丝毫不会觉得它是一台“小屏

您可以将文件存储在iPhone上,并通过预装的“文件”应用访问它们。在该应用中,您可以浏览并管理所有文档、文件、图像以及从网络下载的其他内容。以下帖子将详细解释如何在iPhone上查找和访问保存的文件。您将了解如何访问不同的存储位置、同步文件与iCloud,并从其他设备上访问它们。如何在iPhone上查找文件检查保存在iPhone上的文件非常简单。只需使用预装在所有iPhone上的AppleFiles应用程序即可。您可以从应用程序库访问它,或者通过在Spotlight上搜索来打开它。如果您无法在


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版
Alat pembangunan web visual
