このようなS =「123456579」のような数値文字列のS、所与、我々は、式のフィボナッチ数列に[123、456、579]、それを分割することができます。
正式に、フィボナッチ数列は、非負整数リストFのタイプであり、かつ満たします。
0 <= F [i]が< = 2 ^ 31から1は、( すなわち、各整数32ビット符号付き整数型と一致している)
。F.length> = 3;
全て0 <= iがFを<長さ- 2、F [i]が+ F [Iの両方 + 1] = F [I + 2] 成り立ちます。
また、文字列が小片に分割されている場合、ブロック番号自体0でない限り、各ブロック番号はゼロで開始してはならないことに注意してください。
Sは、式ブロックの全てフィボナッチ数列のリターンから振り切らそれは[]を返す場合に分割することができません。
例1:
入力: "123456579"
出力:[123456579]
例2:
入力: "11235813"
出力:[1、1、]
例3:
入力:「112 358 130」
出力:[]
説明:このタスクを完了することができません。
例4:
入力:「0123」
出力:[]
説明:各ブロック番号がゼロで始めることはできません、「01」、「2」、「3」は、有効な回答ではありません。
例5:
入力: "1101111"
出力:[110、1、111]
説明:出力[11,0,11,11]も受け入れられます。
ヒント:
1 <= S.length <= 200
文字列Sは、数値のみが含まれています。
出典:ボタン(LeetCode)に滞在
します。https://leetcode-cn.com/problems/split-array-into-fibonacci-sequenceリンク
すべてのネットワークからの控除が著作権を保有します。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。
少し腐ったコードは、より多くの午前5時数、本当にTM性交の前の数値よりも、長い時間のために行います。
1つの パブリック クラスソリューション{ 2 プライベートストリングS。 3 プライベート int型のlen = -1 ; 4 プライベートリスト<整数> のres; 5 プライベート int型のE1; 6 プライベート int型のE2; 7 プライベート int型のE3。 8 9 プライベートストリングisContinue(INT M、整数 nは、INT O){ 10 列R = NULL ; 11 列A = s.substring(M、N)。 12 列B = s.substring(N、O)。 13 であれば(a.length()> 10 ||てb.length()> 10 ) 14 リターン "" 。 15 長い A0 = Long.parseLong(A)。 16 長い B0 = Long.parseLong(B)。 17 もし(A0> 2147483647 || B0> 2147483647 ) 18 リターン "" ; 19 のE1 =(INT )A0。 20 のE2 =(INT )B0。 21 もし(A0 + B0> 2147483647 ) 22 リターン ""; 23 のE3 =(INT)(A0 + B0)。 24 列C = String.valueOf(A0 + B0)。 25 であれば(a.charAt(0)== '0' && a.length()!= 1 || b.charAt(0)== '0' &&てb.length()!= 1 ) 26 R = " " ; 27 他の 場合(> len- c.length()O) 28 、R = "" ; 29 他に あれば(s.substring(O、O +!c.length())のequals(C)。) 30 、R = "" ; 31 リターン(R!= nullの)?"" :C; } 33 34 プライベート ブールヘルパー(INT M、整数 nは、INT O){ 35 であれば(isContinue(M、N、O).equals( "" )){ 36 リターン 偽。 37 } 38 39 のために(int型 I = N; iがLEN <; Iは++ ){ 40 のために(int型 J = I + 1、J <LEN; J ++ ){ 41 列C = isContinue(M、I、J)。 42 であれば(c.equals( "" )) 43 続けます。 44 であれば(s.substring(J、J + c.length())に等しい(C)){ 45 であれば(c.length()> len- J) 46 戻り 偽。 47 48 res.add(E1)。 49 50 であれば(c.length()== len- J){ 51 であれば(E2 == E1 || res.get(res.size() - 1)=!E2) 52 res.add(E2)。 53 res.add(E3)。 54 リターン 真。 55 } 56 であれば((I、J、J +ヘルパーc.length())) 57 リターン 真。 58 59 res.remove(res.size() - 1 )。 60 } 61 } 62 } 63 リターン 偽。 64 } 65 公衆リスト<整数> splitIntoFibonacci(文字列S){ 66 のS =のS。 67 LEN = s.length()。 68の RES = 新規のArrayList <> (); 69 70 のために(int型 i = 1; iがLEN <; iは++ ){ 71 のための(int型 ; J <LEN J ++ J = I + 1 ){ 72 であれば(ヘルパー(0 、i、j)は) 73の リターンRES。 74 } 75 } 76の リターンRES。 77 } 78 79 公共 静的 ボイドメイン(文字列[]引数){ 80 一覧<整数> =整数新しいソリューション()。splitIntoFibonacci( "3611537383985343591834441270352104793375145479938855071433500231900737525076071514982402115895535257195564161509167334647108949738176284385285234123461518508746752631120827113919550237703163294909"); 81 のSystem.out.println( "整数=" + 整数)。 82 } 83 }