题解 | #递归,全排列,回溯#

字符串的排列

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

import java.util.*;
public class Solution {
    //交换法
    public ArrayList<String> Permutation(String str) {
       HashSet<String> set = new HashSet<>() ;
       helper(str.toCharArray() , 0 , set) ;
       ArrayList<String> res = new ArrayList<>(set) ;
        return res ;
    }
    
    //求arr[loc,,,,]的全排列
    public void helper(char[] arr , int loc , HashSet<String> res) {
        if(loc == arr.length-1) {//若loc是最后一个位置,则不用交换,证明一次排列已经完成
            res.add(new String(arr)) ;    
        }
        for(int i = loc ; i < arr.length ; i ++) {
            swap(arr,i,loc) ;//让loc之后的每一个位置与loc交换
            helper(arr,loc+1,res) ;//交换之后求loc+1之后的全排列
            swap(arr,i,loc) ;//还原,准备下一次交换
        }
    }
    public void swap(char[] arr , int index1 , int index2) {
        char t = arr[index1] ;
        arr[index1] = arr[index2] ;
        arr[index2] = t ;
    }
}

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

分享一个菜鸟的成长记录

全部评论

相关推荐

Java抽象带篮子:简历怎么写可以看看我发的帖子,你的第一个是实习经历吗?那怎么写的是你的第一个练手项目呢?简历写的怎么样直接投小厂面试一下就知道了
没有实习经历,还有机会进...
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务