Go語言程式計算字串的所有排列


在 Go 程式語言中,字串是一種內建資料型別,表示字元序列。它們用雙引號 (") 定義,可以包含任何有效的 Unicode 字元。字串的排列是指具有相同字元但字元順序不同的不同字串。例如,“abcd”和“dabc”是彼此的排列。在本程式中,我們將探討查詢字串排列並使用 Go 語言中的列印語句在控制檯上列印輸出的方法。

語法

func append(slice, element_1, element_2…, element_N) []T

append 函式用於向陣列切片新增值。它接受多個引數。第一個引數是要向其中新增值的陣列,後面跟著要新增的值。然後,該函式返回包含所有值的最終陣列切片。

func len(v Type) int

len() 函式用於獲取任何引數的長度。它將一個引數作為我們要查詢其長度的資料型別變數,並返回一個整數,即變數的長度。

演算法

  • 步驟 1 − 建立一個 package main 並宣告程式中的 fmt(格式包),其中 main 生成可執行示例,fmt 幫助格式化輸入和輸出。

  • 步驟 2 − 主函式將輸入列表、其長度和指向包含排列的整數切片陣列的指標傳遞給 heapPermutation 函式。

  • 步驟 3 − heapPermutation 函式驗證列表的長度是否為 1。如果是,則我們已經固定了列表的所有元件,使當前列表成為一個排列。因此,它將當前列表新增到排列切片中。

  • 步驟 4 − 如果列表的長度大於 1,則函式進入一個迴圈,在該迴圈中它不斷地呼叫自身,其中包含列表的 n-1 個條目。

  • 步驟 5 − 使用巢狀迴圈,列表的最後一個元素與前面每個元件交換。

  • 步驟 6 − 然後,函式將當前排列新增到排列切片中。

  • 步驟 7 − 然後,函式使用 if 語句確定列表的長度是偶數還是奇數。如果是奇數,它將交換第一個元素和最後一個元素;如果是偶數,它將交換第 i 個索引處的元素和最後一個元素。

  • 步驟 8 − 此後,函式對列表中的每個元素重複上述過程。

  • 步驟 9 − 生成所有可能的排列後,函式返回排列切片。

  • 步驟 10 − 使用 fmt.Println() 函式列印控制檯上的排列,其中 ln 表示換行。

  • 步驟 11 − 此方法的時間複雜度為 O(n!),因為長度為 n 的列表有 n! 個排列。由於所有排列都必須儲存在切片中,因此空間複雜度也是 O(n!)。由於其非遞迴特性,對於大型輸入,此策略可能比遞迴方法更有效,因為它可以防止堆疊溢位錯誤。

示例

這裡我們使用 Heap 演算法建立給定列表的所有按字典順序排列的排列。

package main
import (
   "fmt"
)

func heapPermutation(mystr []int, n int, permutations *[][]int) {
   if n == 1 {
      *permutations = append(*permutations, append([]int{}, mystr...))
      return
   }
   for i := 0; i < n; i++ {   //calculate the permutation using heap
      heapPermutation(mystr, n-1, permutations)
      if n%2 == 0 {
         mystr[i], mystr[n-1] = mystr[n-1], mystr[i]
      } else {
         mystr[0], mystr[n-1] = mystr[n-1], mystr[0]
      }
   }
}

func main() {
   mystr := []int{10, 20, 30}  //create a slice with numbers whose permutation is to be calculated 
   fmt.Println("The elements of string are:", mystr)
   permutations := [][]int{}
   heapPermutation(mystr, len(mystr), &permutations)
   fmt.Println("The permutations of string presented here is:")
   fmt.Println(permutations)  //print the permutations 
}

輸出

The elements of string are: [10 20 30]
The permutations of string presented here is:
[[10 20 30] [20 10 30] [30 10 20] [10 30 20] [20 30 10] [30 20 10]]

結論

我們使用一個示例執行了查詢字串排列的程式。在特定示例中,我們使用堆演算法來執行執行。程式給出了預期的輸出。

更新於:2023年2月20日

712 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.