Leetcode 08.07 无重复字符串的排列组合

  回溯题目,JAVA 实现:

复制代码
 public final String[] permutation(String S) {
        Set<String> reSet = new HashSet<String>();
        permutation(S.toCharArray(), new StringBuilder(), reSet);
        return setToStrArr(reSet);
    }

    private final void permutation(char[] sChars, StringBuilder sb, Set<String> reSet) {
        if (sb.length() == sChars.length) {
            String str = sb.toString();
            if (!reSet.contains(str)) {
                reSet.add(str);
            }
            return;
        }
        for (int i = 0; i < sChars.length; i++) {
            if (sChars[i] == '-') {
                continue;
            }
            char currentChar = sChars[i];
            sChars[i] = '-';
            sb.append(currentChar);
            permutation(sChars, sb, reSet);
            sb.deleteCharAt(sb.length() - 1);
            sChars[i] = currentChar;
        }
    }

    private final String[] setToStrArr(Set<String> reSet) {
        if (reSet == null || reSet.size() == 0) {
            return new String[0];
        }
        String[] reStrArr = new String[reSet.size()];
        Iterator iterator = reSet.iterator();
        int i = 0;
        while (iterator.hasNext()) {
            reStrArr[i] = (String) iterator.next();
            i++;
        }
        return reStrArr;
    }
复制代码

  JS 实现:

复制代码
var permutation = function (s) {
    let arr = [];
    search(s, "", arr);
    return arr;
}

var search = function (str, reStr, reArr) {
    if (reStr.length == str.length) {
        reArr.push(reStr);
        return;
    }
    for (let i = 0; i < str.length; i++) {
        if (reStr.indexOf(str.charAt(i))!=-1) {
            continue;
        }
        search(str, reStr + str.charAt(i), reArr);
    }
}
复制代码

 

 

 

posted @   牛有肉  阅读(476)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示