题目链接:https://leetcode-cn.com/problems/jump-game-vii/comments/
题目描述
给你一个01串和两个整数minJump,maxJump,起始点必为0,每次能跳的步数在两个整数范围内,只能跳在0上,问能不能到达终点(字符串的最后一个字符)。
思路
bfs+剪枝,maxJump-minJump到maxJump之间的数如果有0就不用在其他范围内跳了,结果无影响,如果范围内没有0再在前面找一个可以跳的位置就行了,注意特判s.size()-1=='1'的情况
code
class Solution { public: queue<int> q; bool canReach(string s, int minJump, int maxJump) { if (s[s.size() - 1] == '1') return false; while (q.size()) q.pop(); q.push(0); while (!q.empty()) { int start = q.front(); // cout << start << endl; if (start == s.size() - 1) return true; q.pop(); int flag = 1; int z = max(maxJump - minJump + 1, minJump); for (int i = z; i <= maxJump; i++) { if (start + i < s.size() && s[start + i] == '0') q.push(start + i), flag = 0; } if (flag) { for (int i = z - 1; i >= minJump; i--) { if (start + i < s.size() && s[start + i] == '0') { q.push(start + i); break; } } } } return false; } };