次に近い時間

フォーマット「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です }

 

おすすめ

転載: www.cnblogs.com/beiyeqingteng/p/10934970.html