Given a number num (0 < num < 108), the task is to sort the digits of the number such that even indices are in ascending order and odd indices in descending order.
Examples:
Input: num = 1423 Output: 4132 Explanation: Sort number num in ascending order: num = 1234 Replace even indices in ascensing order: *1*2 And odd indices in descending order: 4*3* So the becomes 4132. Input: num = 500100 Output: 501000
RECOMMENDED: Characteristics or features of an Algorithm
Approach:
Follow the steps below to solve the problem:
- Convert the number to a string.
- Sort the string in alphabetical order.
- Traverse the string for half-length and at each iteration print last ith index and ith index of the string.
- If the size of the string is odd, after completion of iteration print the middle character of the string.
Below is the implementation of the above approach.
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to sort odd indices in ascending order and even // indices in descending order of the number void sortNum(int num) { // Converting number to string string S = to_string(num); // Length of string int n = S.size(); // Sort string in ascending order sort(S.begin(), S.end()); // Traverse the string for (int i = 0; i < n / 2; i++) { cout << S[n - i - 1] << S[i]; } // If length of string is odd if (n & 1) cout << S[n / 2]; } // Driver Code int main() { int num = 1423; sortNum(num); return 0; }
Output:
4132
Time Complexity: O(|num|)
Auxiliary Space: O(1)
Please write comments below if you find anything incorrect, or you want to share more information about the topic discussed above. A gentle request to share this topic on your social media profile.