이 문제에서 요소 N이 주어집니다. 동일한 자릿수 집합을 가진 다음 큰 숫자를 찾아야 합니다. N보다 큰 같은 자릿수를 가진 가장 작은 수를 찾아야 합니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
입력
N = "92534"
출력
92543
솔루션 접근 방식
다음으로 더 큰 요소를 찾기 위한 문제에 대한 간단한 해결책은 다음과 같은 접근 방식을 사용하는 것입니다 -
-
최하위 비트에서 최상위 비트로 숫자를 순회합니다. 그리고 현재 요소가 마지막 요소보다 작으면 중지합니다.
-
이 검색 후에 나머지 배열에서 가장 작은 요소를 찾습니다. 그리고 가장 작은 숫자를 찾아 그 숫자로 바꿉니다.
-
그런 다음 나머지 하위 배열을 정렬하고 출력을 반환합니다.
우리 솔루션의 작동을 설명하는 프로그램
예시
#include <iostream> #include <cstring> #include <algorithm> using namespace std; void findNextGreater(char number[], int n) { int i, j; for (i = n-1; i > 0; i--) if (number[i] > number[i-1]) break; if (i==0) { cout<<"Next number is not possible"; return; } int x = number[i-1], smallest = i; for (j = i+1; j < n; j++) if (number[j] > x && number[j] < number[smallest]) smallest = j; char temp = number[smallest]; number[smallest] = number[i-1]; number[i-1] = temp; sort(number + i, number + n); cout<<number; return; } int main(){ char number[] = "92534"; int n = strlen(number); cout<<"The next number with same set of digits is "; findNextGreater(number, n); return 0; }
출력
The next number with same set of digits is 92543