import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return string字符串二维数组
     */
    public static ArrayList<ArrayList<String>> arrayList = new ArrayList<>();
    public static ArrayList<String> stringArrayList = new ArrayList<>();

    public boolean isPalindrome (String s) {
        // write code here
        StringBuilder stringBuffer1 = new StringBuilder();
        stringBuffer1.append(s);
        return stringBuffer1.toString().equals(stringBuffer1.reverse().toString());
    }

    public String[][] partition (String s) {
        // write code here
        char[] chars = s.toCharArray();
        search(0, chars, new StringBuffer());
        String[][] strings = new String[arrayList.size()][];
        for (int i = 0; i < strings.length; i++) {
            strings[i] = new String[arrayList.get(i).size()];
            for (int j = 0; j < arrayList.get(i).size(); j++) {
                strings[i][j] = arrayList.get(i).get(j);
            }
        }
        return strings;
    }

    public void search(int cur, char[] chars, StringBuffer stringBuffer) {
        if (cur == chars.length) {
            int length = 0;
            for (int i = 0; i < stringArrayList.size(); i++) {
                length += stringArrayList.get(i).length();
            }
            if (length == chars.length) {
                arrayList.add(new ArrayList<>(stringArrayList));
            }
            return;
        }
        stringBuffer.append(chars[cur]);
        if (isPalindrome(stringBuffer.toString())) {
            stringArrayList.add(stringBuffer.toString());
            search(cur + 1, chars, new StringBuffer());
            stringArrayList.remove(stringArrayList.size() - 1);
        }
        search(cur + 1, chars, stringBuffer);
        stringBuffer.deleteCharAt(stringBuffer.length() - 1);
    }

}

本题主要考察N叉树的建立,所用编程语言是java。

本题相比前面全排列数多了一个判断条件,每个组合中的字符串都需要是回文串,所以我们需要编写一个函数判断是否是回文串,然后按照全排列数的组合那题做法进行解题就行