代码随想录算法刷题训练营day30:LeetCode(332)重新安排行程、LeetCode(51)n-皇后、LeetCode(37)解数独

代码随想录算法刷题训练营day30:LeetCode(332)重新安排行程、LeetCode(51)n-皇后、LeetCode(37)解数独

LeetCode(332)重新安排行程
题目
在这里插入图片描述

代码

//第二次刷题---在刷--高难度---注意超时---该代码照着代码随想录卡哥编写的代码写的,题目难度过大,目前解决不了
/*  该方法是对第二个方法的改进,主要变化在于将某点的所有终点变更为链表的形式,优点在于
        1.添加终点时直接在对应位置添加节点,避免了TreeMap增元素时的频繁调整
        2.同时每次对终点进行增加删除查找时直接通过下标操作,避免hashMap反复计算hash*/
        class Solution {
   
            private Deque<String> res;
            private Map<String, Map<String, Integer>> map;
        
            private boolean backTracking(int ticketNum){
   
                if(res.size() == ticketNum + 1){
   
                    return true;
                }
                String last = res.getLast();
                if(map.containsKey(last)){
   //防止出现null
                    for(Map.Entry<String, Integer> target : map.get(last).entrySet()){
   
                        int count = target.getValue();
                        if(count > 0){
   
                            res.add(target.getKey());
                            target.setValue(count - 1);
                            if(backTracking(ticketNum)) return true;
                            res.removeLast();
                            target.setValue(count);
                        }
                    }
                }
                return false;
            }
        
            public List<String>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值