Leetcode:队列BFS 打开转盘锁

慢慢写,慢慢感觉。

class Solution {
public:
    int openLock(vector<string>& deadends, string target) {
    	unordered_set<string> deadset(deadends.begin(),deadends.end());
    	if(deadset.find("0000") != deadset.end())
    	{
    		return -1;
    	}

    	queue<string> queueA;
    	queueA.push("0000");
    	unordered_set<string> visited;
    	visited.insert("0000");
    	int times = 0;
    	while(!queueA.empty())
    	{
    		int QueueNumber = queueA.size();
    		for(int i = 0 ; i < QueueNumber ; i++)
    		{
    			string stringA = queueA.front();
    			if(stringA == target)
    			{
    				return times;
    			}
    			queueA.pop();

    			for(int j = 0 ; j < 4 ; j++)
    			{
    				string stringAdd = stringA;
    				string stringSub = stringA;

    				stringAdd[j] = stringAdd[j]=='9'?'0':stringAdd[j]+1;
    				stringSub[j] = stringSub[j]=='0'?'9':stringSub[j]-1;

    				if(deadset.find(stringAdd) == deadset.end() && visited.find(stringAdd) == visited.end())
    				{
    					queueA.push(stringAdd);
    					visited.insert(stringAdd);
    				}
    				if(deadset.find(stringSub) == deadset.end() && visited.find(stringSub) == visited.end())
    				{
    					queueA.push(stringSub);
    					visited.insert(stringSub);
    				}

    			}

    		}
    		times++;	
    	}
    	return -1;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值