2016-11-02 6 views
0

私のコードは正しいようだが、私はそれを返すために-1は大きな数を生成できない場合必要があります。次の同じ桁の最大数

def next_bigger(n): 
    strNum = str(n) 
    length = len(strNum) 
    for i in range(length-2, -1, -1): 
     current = strNum[i] 
     right = strNum[i+1] 
     if current < right: 
      temp = sorted(strNum[i:]) 
      next = temp[temp.index(current) + 1] 
      temp.remove(next) 
      temp = ''.join(temp)  
      return int(strNum[:i] + next + temp) 
     else: 
      return -1 
    return n 

これを解決する私の試みは動作していない:elseを追加しますcurrentrightより大きい場合の代替手段と認識しています。

助けてください!

+0

あなたは、いくつかの入力のために返されることしたい値の例を提供することはできますか? –

+0

ここではいくつかのことが役に立ちます - まず、このコードでいくつかのコメントを得て、このソリューションが何をしようとしているのかを知ることができれば幸いです。次に、生成された出力とともに 'next_bigger'のいくつかの例を示すべきです。動作しているテストケースとそうでないテストケースの両方を表示するのが理想的です。 – mgilson

+0

Test.assert_equals(next_bigger(12)、21) Test.assert_equals(next_bigger(513)、531) Test.assert_equals(next_bigger(2017)、2071) Test.assert_equals(next_bigger(414)、441) テスト.assert_equals(next_bigger(144)、414) –

答えて

1

とにかく、あなたのコードの流れが間違っている:あなたのループの中で、あなたは以下の構造を有する:

 
for A : 
    if B : 
     return 
    else : 
     return 

をだからあなたのプログラムは、常に2回目の反復の前に終了します。

申し訳ありませんが、これを回答に投稿していますが、まだコメントできません。

0

コードを修正するよりも、コードを修正する方がはるかに難しい場合があります。私はこれがどれくらいの助けになるか分からないが、次のコードを試してみてください。

それは何
def next_bigger(n): 
    str_num = str(n) 
    size = len(str_num) 
    for i in range(2, size + 1): 
     sublist = list(str_num[-i:size]) 
     temp = sorted(sublist, reverse=True) 
     if sublist != temp: 
      return int(str_num[:size-i] + ''.join(temp)) 
    return -1 

は、それがに参加した際に発生したスライスが可能最大数を生成する場合を見に戻って(2つの要素スライスから始まり、lenまでに起こっ)と小切手の番号をスライスすることです。そうでなければ、次に大きいものに置き換えて返します。これがあなたのために働くかどうか私に教えてください。


n = 4181536841 

sublist = ['4', '1'] 
temp = ['4', '1'] # they are the same so no larger number can be produced just by looking at a slice of length 2. 

#---------iteration 2--------------- 
sublist = ['8', '4', '1'] 
temp = ['8', '4', '1'] # they are again the same so no larger number can be produced just by looking at a slice of length 3. 

#---------iteration 3--------------- 
sublist = ['6', '8', '4', '1'] 
temp = ['8', '6', '4', '1'] # now they are different. So produce a number out of temp (8641) ans stich it to the rest of the number (418153) 
return 4181538641 
+0

+1は、 "コードを修正することはそれを書き換えるよりも難しい"です。実際に思っていなくても3日を作業コーディングで過ごしただけで、それは駄目でした。すべてを一から書き直した後、その日を過ごした。 –

関連する問題