思路:
简单递推,到每个节点,将自己前一个值,和别的路的值+1相比较,得最小值,有障碍的时候默认最大值就行了。
class Solution {
public:
int minSideJumps(vector<int>& obstacles) {
int l = obstacles.size();
int a,b,c;
a = 1;
c = 1;
b = 0;
for(int i = 0; i < l; i++){
if(obstacles[i] == 1){
a = 100000005;
b = min(b, c + 1);
c = min(c, b + 1);
}else if(obstacles[i] == 2){
b = 100000005;
a = min(a, c + 1);
c = min(c, a + 1);
}else if(obstacles[i] == 3){
c = 100000005;
a = min(a, b + 1);
b = min(b, a + 1);
}else{
a = min(a,min(c + 1, b + 1));
b = min(b,min(a + 1, c + 1));
c = min(c,min(a + 1, b + 1));
}
// cout << a << " " << b << " " << c << endl;
}
return min(a,min(b,c));
}
};