# Minimize steps to reach K from 0 by adding 1 or doubling at each step

Given a positive integer K, the task is to find the minimum number of operations of the following two types, required to change 0 to K:

• Add one to the operand
• Multiply the operand by 2.

Examples:

Input: K = 1
Output: 1
Explanation:
Step 1: 0 + 1 = 1 = K

Input: K = 4
Output: 3
Explanation:
Step 1: 0 + 1 = 1,
Step 2: 1 * 2 = 2,
Step 3: 2 * 2 = 4 = K

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• If K is an odd number, the last step must be adding 1 to it.
• If K is an even number, the last step is to multiply by 2 to minimise the number of steps.
• Create a dp[] table that stores in every dp[i], the minimum steps required to reach i. Below is the implementation of the above approach:

## C++

 // C++ program to implement the above approach  #include  using namespace std;     // Function to find minimum operations  int minOperation(int k)  {      // vector dp is initialised      // to store the steps      vector<int> dp(k + 1, 0);         for (int i = 1; i <= k; i++) {             dp[i] = dp[i - 1] + 1;             // For all even numbers          if (i % 2 == 0) {              dp[i]                  = min(dp[i],                        dp[i / 2] + 1);          }      }      return dp[k];  }     // Driver Code  int main()  {      int K = 12;      cout << minOperation(k);  }

## Java

 // Java program to implement the above approach  class GFG{         // Function to find minimum operations  static int minOperation(int k)  {             // dp is initialised      // to store the steps      int dp[] = new int[k + 1];         for(int i = 1; i <= k; i++)      {         dp[i] = dp[i - 1] + 1;                   // For all even numbers         if (i % 2 == 0)         {             dp[i] = Math.min(dp[i], dp[i / 2] + 1);         }      }      return dp[k];  }     // Driver Code  public static void main (String []args)  {      int K = 12;      System.out.print( minOperation(K));  }  }     // This code is contributed by chitranayal

## Python3

 # Python3 program to implement the above approach     # Function to find minimum operations  def minOperation(k):             # dp is initialised      # to store the steps      dp =  * (k + 1)         for i in range(1, k + 1):          dp[i] = dp[i - 1] + 1            # For all even numbers          if (i % 2 == 0):              dp[i]= min(dp[i], dp[i // 2] + 1)         return dp[k]     # Driver Code  if __name__ == '__main__':             k = 12            print(minOperation(k))     # This code is contributed by mohit kumar 29

## C#

 // C# program to implement the above approach  using System;  class GFG{         // Function to find minimum operations  static int minOperation(int k)  {             // dp is initialised      // to store the steps      int []dp = new int[k + 1];         for(int i = 1; i <= k; i++)      {          dp[i] = dp[i - 1] + 1;                         // For all even numbers          if (i % 2 == 0)          {              dp[i] = Math.Min(dp[i], dp[i / 2] + 1);          }      }      return dp[k];  }     // Driver Code  public static void Main()  {      int K = 12;      Console.Write(minOperation(K));  }  }     // This code is contributed by Nidhi_Biet

Output:

5


Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.