回溯算法实现全排列的一个小demo(Java)

代码

public class QPL {
    // 定义输入
    String[][] input = new String[][] {
            {"1","2","3"},
            {"a","b","c"},
            {"A","B","C"}
    };
    // 定义临时
    StringBuilder temp = new StringBuilder();
    // 定义结果
    StringBuilder res = new StringBuilder();

    // 定义输出函数
    public String output() {
        dfs(0); // 开启全排列递归
        res.deleteCharAt(res.length() - 1);// 删除最后多余的逗号
        return res.toString(); // 转化为字符串并返回
    }

    // 定义递归函数
    public void dfs(int index) {
        if (index == input.length) { // 终止条件:循环完所有的一维数组
            res.append(temp.toString() + ",");// 拼接temp并添加至res中
        } else {
            for (String i : input[index]) {// 固定index位
                temp.append(i);// 添加i至temp
                dfs(index+1);// 开启固定index+1位
                temp.deleteCharAt(temp.length()-1);// 回溯至index-1位
            }
        }
    }

    // 主函数(启动运行)
    public static void main(String[] args) {
        QPL test = new QPL();
        System.out.println(test.output());
    }
}

运行结果

1aA,1aB,1aC,1bA,1bB,1bC,1cA,1cB,1cC,2aA,2aB,2aC,2bA,2bB,2bC,2cA,2cB,2cC,3aA,3aB,3aC,3bA,3bB,3bC,3cA,3cB,3cC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值