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

例:
在这里插入图片描述
就如图所示,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;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_44841849/article/details/106206802