题解 | #字符串的排列,使用辅助boolean[]来标记#

字符串的排列

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

import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> res = new ArrayList<>() ;
        if(str == null || str.length() == 0) return res ;
        char[] arr = str.toCharArray() ;
        Arrays.sort(arr) ;
        help(arr , new boolean[arr.length] , new StringBuilder() , res) ;
        return res ;
    }
    //使用辅助数组,进行标记
    public void help(char[] arr , boolean[] isV , StringBuilder sb ,ArrayList<String> res) {
        if(sb.length() == arr.length) {
            res.add(sb.toString()) ;
            return ;
        }
        for(int i = 0 ; i < arr.length ; i ++) {
            if(isV[i]) continue ;
            //处理重复的情况
            if(i > 0 && arr[i] == arr[i - 1] && !isV[i - 1]) continue ;
            isV[i] = true ;
            sb.append(String.valueOf(arr[i])) ;
            help(arr , isV , sb , res) ;
            sb.deleteCharAt(sb.length() - 1) ;
            isV[i] = false ;
        }
    }
}

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

分享一个菜鸟的成长记录

全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务