给你一个非负整数数组,里面的值表示当前位置能够跳的最远距离,现在每次都从参数0开始跳,请问能跳到终点吗?
样例:
输入:[2,3,1,1,4]
输出:true
输入:[3,2,1,0,4]
输出:false
参考代码:dfs直接解
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<int> nums;
bool sign = false;
void trans(string &str) {
int n = str.size() - 1;
int i = 1;
while (i < n) {
int loc = i;
while (i < n&&str[i] != ',')
++i;
string s = str.substr(loc, i - loc);
nums.push_back(stoi(s));
++i;
}
}
void isReach(int i) {
if (i == nums.size() - 1) {
sign = true;
return;
}
int n = nums[i];
for (int k = 1; k <= n; ++k) {
i += k;
isReach(i);
i -= k;
}
}
int main() {
string str;
getline(cin, str);
trans(str);
isReach(0);
if (sign)
cout << "true" << endl;
else
cout << "false" << endl;
}
全部评论
(0) 回帖