给定一个 没有重复 数字的序列,返回其所有可能的全排列。
- 示例:
输入: [1,2,3]
输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
解法:直接回溯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| object AllPermutations {
def main(args: Array[String]): Unit = { println(permute(Array(1, 2, 3))) println(permute(Array(1, 2))) }
val res = new ListBuffer[List[Int]]()
def permute(nums: Array[Int]): List[List[Int]] = { res.clear() backtrack(nums, new ListBuffer[Int]()) res.toList }
def backtrack(nums: Array[Int], selectList: ListBuffer[Int]): Unit = { if(selectList.length == nums.length){ res += selectList.clone().toList return }
for(num <- nums){ if(!selectList.contains(num)){ selectList += num backtrack(nums, selectList) selectList -= num } } } }
|