按水仙花方案分割字符串
public class shuixian {
//res记录所有分割方案
static List<List<String>> res = new ArrayList<>();
static boolean[][] f;
public static void main(String[] args) {
String s = new Scanner(System.in).nextLine();
int n = s.length();
f = new boolean[n][n];
//提前处理区间内水仙花字符
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
f[i][j] = check(s, i, j);
}
}
dfs(s,0,new ArrayList<>());
if(res.size() == 0) System.out.println("0");
else if(res.size() == 1) System.out.println("2");
else System.out.println("-1");
}
public static boolean check(String s, int x, int y) {
int res = 0, k = 0;
for (int i = y; i <= x; i++) {
int c = s.charAt(i);
res += c;
}
int a = res / 100;
int b = res / 10 % 10;
int c = res % 10;
return res == (a * a * a + b * b * b + c * c * c);
}
public static void dfs(String s,int u,List<String> t) {
if(u == s.length()) {
res.add(new ArrayList<>(t));
return;
}
for(int i = u; i < s.length(); i++) {
if(f[i][u]) {
t.add(s.substring(u,i + 1));
dfs(s,i + 1,t);
t.remove(t.size() - 1);
}
}
}
}