给定一个长整数,返回该数字的最小(大小)整数排列。
例子:
Input : 5468001
Output : 1004568
Input : 5341
Output : 1345
问题来源: GE数字面试经验|套装6
我们已经在下面的文章中讨论了一个解决方案。
通过重新排列给定数字的最小数字
在这篇文章中,讨论了一种不同的方法。
方法:由于数长,字符串交换第一个元素存储号码为字符串,排序的字符串,如果没有前导零,返回该字符串,如果有任何前导零,与字符串的第一个非零元素,返回字符串。
下面是上述方法的实现:
C++
// CPP program to find smallest
// permutation of given number
#include
using namespace std;
// return the smallest number permutation
string findSmallestPermutation(string s)
{
int len = s.length();
// sort the string
sort(s.begin(), s.end());
// check for leading zero in string
// if there are any leading zeroes,
// swap the first zero with first non-zero number
int i = 0;
while (s[i] == '0')
i++;
swap(s[0], s[i]);
return s;
}
// driver program
int main()
{
// take number input in string
string s = "5468001";
string res = findSmallestPermutation(s);
cout << res << endl;
return 0;
}
Java
// Java program to find smallest
// permutation of given number
import java.util.Arrays;
public class GFG {
// return the smallest number permutation
static char[] findSmallestPermutation(String s1)
{
// sort the string
char s[] = s1.toCharArray();
Arrays.sort(s);
// check for leading zero in string
// if there are any leading zeroes,
// swap the first zero with first non-zero
// number
int i = 0;
while (s[i] == '0')
i++;
char temp = s[0];
s[0] = s[i];
s[i] = temp;
return s;
}
// driver program
public static void main(String args[])
{
// take number input in string
String s = "5468001";
char res[] = findSmallestPermutation(s);
System.out.println(res);
}
}
// This code is contributed by Sumit Ghosh
Python
# Python program to find smallest
# permutation of given number
# Sort function
def sort_string(a):
return ''.join(sorted(a))
# return the smallest number permutation
def findSmallestPermutation(s):
# sort the string
s = sort_string(s)
# check for leading zero in string
# if there are any leading zeroes,
# swap the first zero with first non-zero number
i = 0
while (s[i] == '0'):
i += 1
a = list(s)
temp = a[0]
a[0] = a[i]
a[i] = temp
s = "".join(a)
return s
# driver program
# take number input in string
s = "5468001"
res = findSmallestPermutation(s)
print res
# This code is contributed by Sachin Bisht
C#
// C# program to find smallest
// permutation of given number
using System;
public class GFG {
// return the smallest number permutation
static char[] findSmallestPermutation(string s1)
{
// sort the string
char []s = s1.ToCharArray();;
Array.Sort(s);
// check for leading zero in string
// if there are any leading zeroes,
// swap the first zero with first non-zero
// number
int i = 0;
while (s[i] == '0')
i++;
char temp = s[0];
s[0] = s[i];
s[i] = temp;
return s;
}
// driver program
public static void Main()
{
// take number input in string
string s = "5468001";
char []res = findSmallestPermutation(s);
Console.WriteLine(res);
}
}
// This code is contributed by vt_m.
PHP
输出:
1004568
优化 :
由于字符集是有限的(从“ 0”到“ 9”),因此我们可以编写自己的排序方法,该方法可以在线性时间内工作(通过计算所有字符的频率)