Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Given a positive integer n, find the smallest integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive integer exists, return -1.
- Input format
- A 32 bit integer N
- Output format
- A single integer
- Sample Input 1
- 12
- Sample Output 1
- 21
- Explanation
- There is only one number greater than 12 which is composed of 2 and 1 and it is 21.
- Constraints
- 0<= N <= 10^9
- */
- vector<int> getDigits(int n) {
- vector<int> digits;
- while (n > 0) {
- digits.push_back(n % 10);
- n /= 10;
- }
- reverse(digits.begin(), digits.end());
- return digits;
- }
- /**
- * @param {number} n
- * @return {number}
- */
- // https://www.youtube.com/watch?v=LuLCLgMElus ; TUF
- function nextGreaterElementWithSameSetOfDigits(n) {
- let arr=getDigits(n);
- let length=arr.length;
- if(length<=1)
- return -1;
- let index1,index2;
- let i=length-2,j;
- while(i>=0&&arr[i]>=arr[i+1]){
- i--;
- }
- index1=i;
- if(index1>=0){
- i=length-1;
- while(i>=0&&arr[i]<=arr[index1]){
- i--;
- }
- index2=i;
- [arr[index1],arr[index2]]=[arr[index2],arr[index1]];
- }
- else
- return -1;
- // reverse after index1+1;
- i=index1+1;
- j=length-1;
- while(i<j){
- [arr[i],arr[j]]=[arr[j],arr[i]];
- i++;
- j--;
- }
- return parseInt(arr.join(''));
- }
- /*
- function nextGreaterElementWithSameSetOfDigits(n) {
- let arr=getDigits(n);
- // console.log(arr);// order of digit should be inPlace
- let i,j;
- let length=arr.length;
- let hasFound=false;
- if(n<10)
- return -1;
- for(let i=length-1;i>=0;i--){
- for(let j=i-1;j>=0;j--){
- if(arr[i]>arr[j]){
- [arr[i],arr[j]]=[arr[j],arr[i]];
- hasFound=true;
- break;
- }
- }
- if(hasFound)
- break;
- }
- if(!hasFound)
- return -1;
- return parseInt(arr.join(''));
- }
- */
- function main() {
- const n = parseInt(readLine(), 10);
- console.log(nextGreaterElementWithSameSetOfDigits(n));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement