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]]
結論
我們使用一個示例執行了查詢字串排列的程式。在特定示例中,我們使用堆演算法來執行執行。程式給出了預期的輸出。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP