题解 | #没有重复项数字的全排列,递归回溯#

没有重复项数字的全排列

http://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1

import java.util.*;

public class Solution {
    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
        help(num , 0 , new ArrayList<>() , res) ;
        return res ;
    }
    /*
    得到arr[start]及其之后所有元素的全排列,并将结果保存到res中
    其中tmp保存的是当前arr[start]的值
    */
    public void  help(int []arr , int start , ArrayList<Integer> tmp,ArrayList<ArrayList<Integer>> res) {
        if(start == arr.length) {
            ArrayList<Integer> r = new ArrayList<>(tmp) ;
            res.add(r) ;
            return ;
        }
        for(int j = start ; j < arr.length ; j ++) {//这个位置之后的元素,都可能出现在start位置
            swap(arr , start , j) ;//和j位置元素交换
            tmp.add(arr[start]) ;//保存新的arr[start]
            help(arr , start + 1 , tmp , res) ;//求start位置之后的元素的全排列
            swap(arr , start , j) ;//递归返回后,恢复现场
            tmp.remove(tmp.size()-1) ;//移除当前元素,恢复现场
        }            
        
    }
    //交换元素
    public void swap(int num[] , int i , int j) {
        int t = num[i] ;
        num[i] = num[j] ;
        num[j] = t ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

肥沃富饶:可能初创公司,老板不懂技术
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务