フォーマット「HH:MM」で表される時間を考えると、現在の数字を再利用することで、次の最も近い時間を形成します。桁が再利用できる回数に制限はありません。
あなたは、与えられた入力文字列が常に有効であると仮定して。例えば、「1:34」、「12時09分」すべて有効です。"午前1時34分"、 "12:9" はすべて無効です。
例1:
入力:「19時34分」
出力:「午前19時39分」
説明:数字1,9、3、4から選ぶ次の最も近い時間は、5分後に発生し、午前19時39分です。これは23時間59分後に発生するので、それは、19時33分ではありません。
例2:
入力:「23:59」
出力:「午後09時22分」
説明:数字2、3、5、9から選ぶ次に近い時間は、午後09時22分です。それが数値入力時間よりも小さいので、返された時間は、次の日の時間であると仮定することができます。
1 パブリック クラスのテスト{ 2 公共文字nextClosestTime(文字列時間){ 3。 CHAR [] RES = time.toCharArray(); 4 CHAR [] =桁新しい新しい CHAR [] {RES [ 0 []、RES 。1 ]、RES [ 3。 ]、RES [ 4 ]}; 図5 は、Arrays.sort(桁); 6 。7 // 復帰後、限り置換の現在の最小単位時間として、RESを操作する交換時期を右から左に 8つの RES [ 4 ] =のfindNext (数字、RES [ 4。、] ' 9 ' ); 9 IF(RESは、[ 4 ]> time.charAt(4))を返すString.valueOf(RES)を、 10の 11 RES [ 3 ] =のfindNext(数字、RES [ 3 ]、' 5 ' )。 12 場合(RESは、[ 3 ]> time.charAt(3))を返すString.valueOf(RES)を、 13の 14 RES [ 1 ] =のRES [ 0 ] == ' 2 '?findNext(数字、RES [ 1 ]、' 3 '):のfindNext(桁、RES [ 1 ]、' 9 ' )。 15 場合(RESは、[ 1 ]> time.charAt(1))を返すString.valueOf(RES)を、 16の 17 RES [ 0 ] =のfindNext(数字、RES [ 0 ]、' 2 ' )。 18 リターンString.valueOf(RES)。 19 } 20 21 プライベート チャーのfindNext(char型 []数字、チャー CUR、チャー{上側) 22 であれば(CUR ==上側)戻り数字[ 0を]; 23 // 次の位置得るために1を追加し、CUR位置を見つける 24 のint POS = Arrays.binarySearch(桁、CUR)+ 1 ; 25 // もし次数の数又は原位置、または上限を超えます数は、次へ進む 26であり 、一方(POS < 4。 &&(桁[POS] == CUR ||桁[POS]> アッパー)){ 27 POS ++ ; 28 } 29 リターン POS == 4桁[?0 :]数字[POS]; 30 } 31です }