【类】:使用递归解决-----排列出n×m×p×...×u种可能的情况

本文介绍了如何使用递归算法来解决字符串数组的排列问题。通过给出的核心代码和思路解析,详细展示了如何将如['abc', 'def']这样的数组排列成所有可能的组合。终止条件包括list为空和只剩一个元素,递归逻辑是先处理剩余元素,再结合当前元素生成排列。" 89067917,1098046,解决VMware Tools安装报错找不到Kernel header的问题,"['虚拟化', 'VMware', 'Linux', '系统管理', '软件安装']
摘要由CSDN通过智能技术生成

例:
在这里插入图片描述
就如图所示,abc和def,一共有如上种可能。
在这里插入图片描述
那么现在开始coding核心代码

先放代码

public static List<String>curse(List<String>input){
        List<String>result=new ArrayList<>();
        if (input.size()==0){
            return result;
        }
        if (input.size()==1){
            String str=input.get(0);
            for (int i = 0; i < str.length(); i++) {
                result.add(String.valueOf(str.charAt(i)));
            }
            return result;
        }
        String head=input.get(0);
        input.remove(0);
        List<String>output=curse(input);
        for (int i = 0; i < head.length(); i++) {
            for (int j = 0; j < output.size(); j++) {
                result.add(head.charAt(i)+output.get(j));
            }
        }
        return result;
    }

如上,传进来的是例如[“abc”,“def”]这样的数组,返回的是他们的排列情况。

思路

直接用主逻辑。这里适合
主逻辑:输出这一串list的排列情况,等价于把list的头部分离出来,先排列出除去头部的情况,再把头部字符串的每一个char拿出来,与其排列。
终止条件:当list的size为0时,没有排列可能,直接返回一个空list,
当list的size为1的时候,返回的结果就是把这一个string的每一个char装入结果集中返回出来。

那么下面放出所有代码

public class Solution {
    public List<String> letterCombinations(String digits) {
        String[]digitsMap=new String[]{""," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        List<String>input=new ArrayList<>();
        for (int i = 0; i < digits.length(); i++) {
            input.add(digitsMap[digits.charAt(i)-'0']);
        }
        return curse(input);
    }


    public static List<String>curse(List<String>input){
        List<String>result=new ArrayList<>();
        if (input.size()==0){
            return result;
        }
        if (input.size()==1){
            String str=input.get(0);
            for (int i = 0; i < str.length(); i++) {
                result.add(String.valueOf(str.charAt(i)));
            }
            return result;
        }
        String head=input.get(0);
        input.remove(0);
        List<String>output=curse(input);
        for (int i = 0; i < head.length(); i++) {
            for (int j = 0; j < output.size(); j++) {
                result.add(head.charAt(i)+output.get(j));
            }
        }
        return result;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值