题解 | #字符串的排列#

字符串的排列

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

import java.lang.StringBuffer;
public class Solution {
    
    // 定义一个整型变量,用于存放 String 的长度
    int sl = 0;
    // 定义一个 ArrayList,用于存放最终的返回结果
    ArrayList<String> rs = new ArrayList<>();
    
    // 系统定义的函数
    public ArrayList<String> Permutation(String str) {
       if (0 == str.length()) { // 如果字符串为空串,直接返回一个空的 ArrayList 即可
           return rs;
       }
       if (1 == str.length()) {
           rs.add(str); // 如果字符串的长度为 1,那么先将字符串加入到 ArrayList 中,然会返回即可
           return rs;
       }
        sl = str.length(); // 获取 String 的长度
        // 调用自定义的递归函数
        process(str, "");
        // 返回结果
        return rs;
    }
    
    // 自定义的递归函数
    public void process(String str, String list) {
        if (sl == list.length()) { // 如果 list 的长度已经为 sl 了,那么就可以考虑将 list 添加到结果集中
            if (!rs.contains(list)) { // 如果结果集中不包含 list,就将 list 添加到结果集中
                rs.add(list);
            }
            return; // 直接返回
        }
        // 将字符串转换为字符数组
        char[] chs = str.toCharArray();
        for (int i = 0; i < str.length(); i++) { // 如果 list 的长度还不为 sl,那么可以从剩余的 str 中选取一个字符,与 list 进行组合
            list += chs[i]; // 将该字符添加到 list 中去
            process(new String(new StringBuffer(str).deleteCharAt(i)), list); // 别忘了,将当前字符从 str 中移除
            list = new String(new StringBuffer(list).deleteCharAt(list.length() - 1)); // 回溯,将 list 末尾的字符删除
        }
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4251次浏览 75人参与
# AI面会问哪些问题? #
27505次浏览 550人参与
# 厦门银行科技岗值不值得投 #
7938次浏览 188人参与
# 你的实习产出是真实的还是包装的? #
20041次浏览 342人参与
# 找AI工作可以去哪些公司? #
8935次浏览 230人参与
# 春招至今,你的战绩如何? #
64488次浏览 575人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15084次浏览 221人参与
# 从事AI岗需要掌握哪些技术栈? #
8791次浏览 299人参与
# 你做过最难的笔试是哪家公司 #
33064次浏览 229人参与
# 中国电信笔试 #
31910次浏览 292人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340695次浏览 2173人参与
# 哪些公司真双非友好? #
69552次浏览 289人参与
# 阿里笔试 #
178352次浏览 1314人参与
# 机械人避雷的岗位/公司 #
62693次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14405次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22047次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26231次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9748次浏览 193人参与
# HR最不可信的一句话是__ #
6151次浏览 113人参与
# 应届生第一份工资要多少合适 #
20663次浏览 86人参与
# AI时代,哪个岗位还有“活路” #
11419次浏览 339人参与
# 春招你拿到offer了吗 #
831079次浏览 9986人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务