Minimum Operations to Convert Number LeetCode solution in C++

1
class Solution {
2
public:
3
int minimumOperations(vector<int> &nums, int start, int goal) {
4
int n = nums.size();
5
// BFS
6
queue<int> q;
7
vector<bool> vis(1001, false);
8

9
q.push(goal);
10
if (0 <= goal && goal <= 1000) vis[goal] = true;
11

12
int dist = -1;
13
bool done = false;
14
while (!q.empty() && !done) {
15
dist++;
16
int sz = q.size();
17
for (int i = 0; i < sz; i++) {
18
int cur = q.front();
19
q.pop();
20
if (cur == start) {
21
done = true;
22
break;
23
}
24
for (int j = 0; j < n; j++) {
25
if (0 <= cur - nums[j] && cur - nums[j] <= 1000 && !vis[cur - nums[j]]) {
26
q.push(cur - nums[j]);
27
vis[cur - nums[j]] = true;
28
}
29
if (0 <= cur + nums[j] && cur + nums[j] <= 1000 && !vis[cur + nums[j]]) {
30
q.push(cur + nums[j]);
31
vis[cur + nums[j]] = true;
32
}
33
if (0 <= (cur ^ nums[j]) && (cur ^ nums[j]) <= 1000 && !vis[cur ^ nums[j]]) {
34
q.push(cur ^ nums[j]);
35
vis[cur ^ nums[j]] = true;
36
}
37
}
38
}
39
}
40

41
return done ? dist : -1;
42
}
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0