找到由给定数字的数字组成的最大可能数字

时间:2015-06-09 20:26:04

标签: algorithm data-structures

给定数字N找到可以从给定数字位数创建的最大可能数字X.

示例:N = 231,然后X将为321。

限制是时间复杂度O(1) 和空间复杂度O(1)。

我认为这必须通过计算排序来完成。

1 个答案:

答案 0 :(得分:2)

我能做的最好的是O(1)空间和O(log(N))时间。很确定它不可能做得更好,因为至少你必须分析输入中的每个数字,即log(N)就在那里。

简短的回答是,按降序排列N的数字。

伪代码:

  1. 创建一个包含10个整数的数组,全部初始化为零。
  2. 遍历N的每个数字。增加数组中与每个数字对应的插槽。
  3. 遍历数组。将字符C的N个实例添加到结果字符串的开头,其中N是存储在数组中插槽号C中的数字。
  4. 示例Python实现:

    N = 231
    slots = [0,0,0,0,0,0,0,0,0,0]
    while N > 0:
        slots[N%10] += 1
        N = int(N / 10)
    
    result = ""
    for slot_idx in range(10):
        for i in range(slots[slot_idx]):
            result = str(slot_idx) + result
    
    print result
    

    结果:

    321