📌  相关文章
📜  查找给定数字的最小排列

📅  最后修改于: 2021-04-29 08:21:33             🧑  作者: Mango

给定一个长整数,返回该数字的最小(大小)整数排列。

例子

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”),因此我们可以编写自己的排序方法,该方法可以在线性时间内工作(通过计算所有字符的频率)