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

字符串的排列

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 ;
    }
}

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

分享一个菜鸟的成长记录

全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务