金字塔转换矩阵
package com.company;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class LeeCode01 {
public static void main(String[] args) {
String bottom="BCD";
List<String> list=new ArrayList<>();
list.add("BCG");
list.add("CDE");
list.add("GEA");
list.add("FFF");
pyramidTransition(bottom,list);
}
private static boolean pyramidTransition(String bottom, List<String> allowed) {
HashMap<String ,ArrayList<Character>> map=new HashMap< String, ArrayList< Character > >();
for (String word:allowed) {
String key=word.substring(0,2);
char value=word.charAt(2);
if (!map.containsKey(key)){
map.put(key,new ArrayList<>());
}
map.get(key).add(value);
}
return helper(bottom,map);
}
private static boolean helper(String bottom, HashMap< String, ArrayList< Character>> map) {
if (bottom.length()==1){
return true;
}
int n=bottom.length();
List<Character>[] lists=new List[n-1];
for (int i=1;i<n;i++){
lists[i-1]=map.getOrDefault(bottom.substring(i-1,i+1),new ArrayList<>());
}
return dfs(lists,0,new StringBuilder(),map);
}
private static boolean dfs(List< Character>[] lists, int cur, StringBuilder sb, HashMap< String, ArrayList< Character>> map) {
if (cur==lists.length){
return helper(sb.toString(),map);
}
for (char c:lists[cur]) {
sb.append(c);
if (dfs(lists,cur+1,sb,map)){
return true;
}
sb.deleteCharAt(sb.length()-1);
}
return false;
}
}