60. 第k个排列

image.png

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. )
  7. var mark []int
  8. func getPermutation(n int, k int) string {
  9. var nums []string
  10. for i:=1;i<=n;i++{
  11. nums = append(nums,strconv.Itoa(i))
  12. }
  13. path :=make([]string,0)
  14. res :=make([]string,0)
  15. mark = make([]int,n)
  16. dfs(nums,path,k,&res)
  17. //fmt.Println(len(res))
  18. return res[k-1]
  19. }
  20. func dfs(nums []string,path []string,length int ,res *[]string){
  21. if len(path)==len(nums) {
  22. tem := make([]string,len(nums))
  23. copy(tem,path)
  24. s := strings.Join(tem,"")
  25. *res = append(*res,s)
  26. return
  27. }
  28. if len(*res)==length {
  29. return
  30. }
  31. for i :=0;i<len(nums);i++{
  32. if mark[i]==1 {
  33. continue
  34. }
  35. mark[i]=1
  36. path = append(path,nums[i])
  37. dfs(nums,path,length,res)
  38. path = path[:len(path)-1]
  39. mark[i]=0
  40. }
  41. }
  42. func main() {
  43. fmt.Println(getPermutation(3,3))
  44. fmt.Println(getPermutation(4,9))
  45. fmt.Println(getPermutation(9,13531))
  46. }