LeetCode 756. Pyramid Transition Matrix

题目描述

756. 金字塔转换矩阵

AC代码

1.求出所有不同字母产生的字母集合
2.从下往上构造,看相邻两个字母可能构成的集合有哪些,递归枚举,直到能构建出金字塔的顶端

class Solution {
    //allow用于保存所有不同字母产生的新字母集合
    List<Character>[][] allow=new ArrayList[7][7];
    public boolean pyramidTransition(String bottom, List<String> allowed) {
       
        for(String s:allowed){
            //a和b可以产生c,所以将c插入到allow集合中
            int a=s.charAt(0)-'A',b=s.charAt(1)-'A';char c=s.charAt(2);
            if(allow[a][b]==null)
                allow[a][b]=new ArrayList<>();
            allow[a][b].add(c);
        }
        //实际上每次存储记录的是相邻两层,所以我们第一次dfs的时候只需要记录最底层和当前层就可以了
        return dfs(bottom,"");
    }
    boolean dfs(String last,String now){
        if(last.length()==1) 
            return true;
        if(last.length()==now.length()+1) 
            return dfs(now,""); 

        int a=last.charAt(now.length())-'A',b=last.charAt(now.length()+1)-'A';
        if(allow[a][b]==null)return false;
        
        for(char c:allow[a][b]){
            if(dfs(last,now+c))
                return true;      
        }            
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值