申明:本文只用做自己的學習記錄
給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。
按大小順序列出所有排列情況,並一一標記,當 n = 3 時, 所有排列如下:
「123」
「132」
「213」
「231」
「312」
「321」
給定 n 和 k,返回第 k 個排列。
示例 1:
輸入:n = 3, k = 3
輸出:「213」
示例 2:
輸入:n = 4, k = 9
輸出:「2314」
示例 3:
輸入:n = 3, k = 1
輸出:「123」
//分析:這是典型的回溯演算法,回溯演算法總共分為以下幾步:
//1.建立迴圈結束條件
//2.遍歷操作
//3.根據題目條件減枝,減少不必要的迴圈
//4.正文操作,回溯函式
//6.復位,也就是回溯,將變數恢復到正文操作前的狀態
func
getpermutation
(n int
, k int
)string
func
backtrack
(n int
, k int
, isvisited [
]bool
, count *
int, current int
, result *
int)
}//2.開始遍歷
for i :=
1; i <= n; i++
//4.正文操作
//進行數字拼湊,整合數字
current = current*
10+ i
//記錄該數字的使用情況,true為使用過
isvisited[i-1]
=true
//5.進行下一階段的搜尋,回溯函式
backtrack
(n, k, isvisited, count, current, result)
//6.回溯到上乙個位置的狀態
//當前數字刪除最後一位數
current = current /
10//重置當前數字的使用情況,false表示沒有使用
isvisited[i-1]
=false}}
//判斷數字的長度,排除n=0的可能
func
lengthof
(current int
)(result int
)return temp
}
leetcode刷題之441 排列硬幣
示例 1 n 5 硬幣可排列成以下幾行 因為第三行不完整,所以返回2.示例 2 n 8 硬幣可排列成以下幾行 因為第四行不完整,所以返回3class solution object defarrangecoins self,n type n int rtype int i 1while n 0 if...
刷題60 排序陣列
給定乙個整數陣列 nums,將該陣列公升序排列。示例 1 輸入 5,2,3,1 輸出 1,2,3,5 示例 2 輸入 5,1,1,2,0,0 輸出 0,0,1,1,2,5 1 a.length 10000 50000 a i 50000 演算法穩定性 時間複雜度 空間複雜度 執行用時 記憶體消耗 自...
每日一題力扣357 排列組合
給定乙個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 x 10n class solution def countnumberswithuniquedigits self,n int int if n 0 當n 0時只有0 return 1n min n,10 限制10位數以下 re...