2016-09-29 3 views
1

アルゴリズムチャレンジを解決しようとしています。ここで説明している:配列を回転させて最大の数値を返します。非常に大きな数値に対しては機能しません

は、数を取る:56789.回して左に、あなたが67895.

を取得する代わりに最初の数字を維持し、他の数字を左回転:68957.

が最初にしてください2位の桁や他のものを回転させる:68579.

残りを左に最初の3桁を維持して回転させる:68597.は、今ではそれが が回転のみ1桁はそれ自体が残っている最初の4つを維持するため、オーバー です。

あなたは数字の以下の配列を有する:

56789 - > 67895 - > 68957 - > 68579 - > 68597

、あなたは偉大な返す必要があります。68957.

この関数max_rotを呼び出します(または 言語に応じmaxRotか...)

max_rot(56789)は68957

を返す必要があります10

これは私の解決策です。すべてのテストで有効ですが、大きな数値を指定すると失敗します。誰かがなぜ失敗するのか教えてもらえますか?すべての場合に有効です。期待

:ここ

function maxRot(n) { 

var numbersArray =[]; 


n = n.toString().split("") 

for(i=0;i<n.length;i++){ 
    var extractedChars = n.splice(i,1) 
    n.push(extractedChars[0]) 
    numbersArray.push(parseInt(n.join(""))) 
} 


    return Math.max(...numbersArray) 
} 

は、エラーのいくつかの例である507992495、代わりに得た:99249557予想

:433039515、代わりに得た:330395154

期待される:210882952、代わりに得た:188295220

どこが間違っていますか?

答えて

-1

EDIT:わかりやすくするためにここに正しい解決法を追加してください(私のコメントからコピーしました): あなたのロジックには何かエラーが見つかりました。シーケンスの最初の番号を追加するのを忘れています。 forループ内の他の2行:numbersArray.push(parseInt(n.join( "")))。また、forループを終了した後に最後の文字列を追加する必要があります。

+0

JavaScriptを使用しています。それを試して、まだ大きな数字でエラーを返します。 –

+0

あなたのロジックのエラーは何ですか?シーケンスの最初の番号を追加するのを忘れています:)この行をforループ内の他の2行の上に押します:numbersArray.push(parseInt(n.join( "") ))。また、forループを終了した後に最後の文字列を追加する必要があります –

+0

ありがとう、私はそれを逃したとは思えません! –

関連する問題