Skip to content

leetcode-golang-classroom/golang_permutations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

golang_permutations

Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.

Examples

Example 1:

Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

Example 2:

Input: nums = [0,1]
Output: [[0,1],[1,0]]

Example 3:

Input: nums = [1]
Output: [[1]]

Constraints:

  • 1 <= nums.length <= 6
  • 10 <= nums[i] <= 10
  • All the integers of nums are unique.

解析

給一個整數陣列 nums

要求寫一個演算法找出所有排列的方法

可以考慮使用決策樹

透過決策樹每次選擇一個陣列元素當作起點

並且紀錄已經使用過的元素

然後逐步帶入尚未使用的元素

程式碼

package sol

func permute(nums []int) [][]int {
	if len(nums) == 0 {
		return [][]int{}
	}
	result := [][]int{}
	used := make([]bool, len(nums))
	var genPerm func(start int, perm []int)
	genPerm = func(start int, perm []int) {
		if start == len(nums) { // reach the end
			temp := make([]int, len(perm))
			copy(temp, perm)
			result = append(result, temp)
			return
		}
		// from start find not used element to permutation
		for idx := 0; idx < len(nums); idx++ {
			if !used[idx] { // not used index
				used[idx] = true
				// take nums[idx]
				perm = append(perm, nums[idx])
				// try next
				genPerm(start+1, perm)
				// rollback
				perm = perm[:len(perm)-1]
				used[idx] = false
			}
		}
	}
	genPerm(0, []int{})
	return result
}

困難點

  1. 理解如何透過窮舉的方式來找出所有可能的組合
  2. 理解如何循序窮舉

Solve Point

  • Understand what problem to solve
  • Analysis Complexity
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy