Advertisement
SalmaYasser

Untitled

Dec 4th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1.  
  2. int getMinStepsHelper(int n, int steps, int curr, unordered_set<int> &visited, int &minSteps){
  3. if (curr == n){
  4. minSteps = steps;
  5. return steps;
  6. } else if (curr == 0){
  7. return INT_MAX; // cannot find a way.
  8. } else if (steps > minSteps){
  9. return INT_MAX;
  10. }
  11.  
  12. if (visited.find(curr) != visited.end()){
  13. return INT_MAX;
  14. }
  15. visited.insert(curr);
  16.  
  17. return min(getMinStepsHelper(n,steps + 1, curr * 2, visited, minSteps), getMinStepsHelper(n, steps + 1, curr / 3, visited, minSteps));
  18. }
  19.  
  20. int getMinSteps(int n){
  21. // only multiply by 2 and divide by 3
  22. // we cannot reverse the ops and go from n to 0 because div truncates so instead we just start from 1
  23. unordered_set<int> visited;
  24. int minSteps = INT_MAX;
  25. return getMinStepsHelper(n, 0, 1, visited, minSteps);
  26.  
  27. }
  28.  
  29. int main(void){
  30. // exponential time complexity 2^N where N is the depth of the recursion tree i.e. number of min steps
  31. cout << "min steps is " << getMinSteps(10) <<endl;
  32.  
  33. }
  34.  
  35. //1 X 2 X 2 X 2 X 2 / 3 X 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement