數字內組合獲得下一個比該數大的數

# 隨意輸入一個數字,用該數字內的數字組合出下一個比該數大的新數。
# 例如輸入14321 下一個是 21134
# 這類問題,除了能給出窮舉可能序列,而且找出下一個大的數字外
# 能夠經過,人工的羅列下幾個可能得數字找規律。
# 例如這一題的規則是:從後至前的找第一對逆序位置,交換逆序位置的元素,而且將前逆序位置後的數字進行順序的重排

1
#!/usr/bin/env python 2 import sys, re, os 3 def findinv( n, end ): 4 i = end 5 while i >= 1: 6 j = i-1 7 while j >= 0: 8 if n[i] > n[j]: 9 return j, i 10 j -= 1 11 i -= 1 12 return -1, -1 13 14 def reorder( n, i ): 15 for j in range(i, len(n)-1): 16 for k in range(j+1, len(n)): 17 if n[j] > n[k]: 18 x = n[j] 19 n[j] = n[k] 20 n[k] = x 21 return n 22 23 def next( n ): 24 end = len(n) 25 if end == 1: return ''.join( map(lambda x:str(x), n) ), False 26 last = n[end-1] 27 i, j = findinv( n, end - 1 ) 28 if i==-1 and j==-1: return ''.join( map( lambda x:str(x),n) ), False 29 temp = n[i] 30 n[i] = n[j] 31 n[j] = temp 32 n = reorder(n, i+1) 33 return ''.join(map( lambda x:str(x), n ) ), True 34 35 a = int(sys.argv[1].strip()) 36 num = [] 37 while a>0: 38 num.append( a%10 ) 39 a/=10 40 a = int(a) 41 num.reverse() 42 print num 43 print next( num )
相關文章
相關標籤/搜索