次に大きい番号

文字列を有するアレイは、文字は、これらの文字で21789よりも大きい最初の数を求めて、例えば2,1,7,8,9など0-9、間のすべてです。

それは21798です。

データが非常に長いので、我々はそれをどのように行うのかと仮定すると、それを打つために、コンピュータ暴力行為によって推定されます。

もちろん、地域の原理であるだけなの未来に目を向けることができ、次に大きな数は、過去を振り返ることはできません12345353245342453245 67、それはよりも次の大きな数12345353245342453245 76を黒い部分は太字であります変化なし。

それでは、データを分析してみましょう。

データが153647である場合、これらの数の最大数は765431であり、134567は最小です。

リフティングなどのデータの場合:


私たちは大きなは、それを探して、最終的にケースにそれを描いてきた見つけるために通過し、次回


このプロセスは、実際にこのパターンを探していると、斜め下方にプロセスになります。すべての変更は、最初の曲がりは、せいぜい2例を曲げない場所でなければなりません「√」「^」

最初のケースは、............ 148として昇順、次の二つのデータ場合であり、次いで直接OKを2つの切換位置の後、結果は184である............


後者の場合、データは次のようであると仮定し、一滴の続く...... 14862、どのようにそれを行うには?


減少の最初のを見つけるために、後方のテールに沿って私たちを見つけます


図6は、それが上昇し、86より大きい上げ、最初の二つよりも大きくなっています。8よりも大きな4は、この番号を見つけるに減少し、4です。

次は最初の尾から4以上の多数を見つけます。次に6を検索します。

(なぜ私が変更されていない番号の前に、まず彼の最初の大きな数、よりたいのか、私たちは、4さておき862 3ナンバーあなたを見ていない、十分な数、4862になり、これらの変化の背後に見てする必要がありますそれが大きな割合を見つけることができます?いいえ、どのように、あなたは2,2を見つけた場合***、その後、我々は最初の8,6,2で4より大きい見つけなければならない、高い上に移動し、する必要があります)*** 4より大きくありません

交换一下4,6这时候数就是……16842了,但是我们应该知道下一个数应该是16248啊,

8 4 2 是降序的,我们需要的是一个升序的。把尾巴反过来就是了。

综合起来我们就是要找第一个下降的,然后让他跟后面第一个比它大的数交换,并把后面的数据变成上升排列的

具体代码为:

import java.util.*;
public class Main {
  public static void main(String[] args)  {
       Scanner input = new Scanner(System.in);
       String str = input.nextLine();
       char [] Arr=str.toCharArray();
       int len=Arr.length;
       char temp=' ';
       int tag=0;        
       for(int i=len-1;i>-1;i-- ){
        if(i==0){ 
        System.out.println("已经是最大的了");
        tag=-1;
        break;
        }
        if(Arr[i-1]<Arr[i]){
        temp=Arr[i-1];
        tag=i-1;
        break;
        }
       
       if(tag!=-1) {
       for(int i=len-1;i>0;i-- )
        if(Arr[i]>temp)
        {
        char temp1;
        temp1=Arr[i];
        Arr[i]=Arr[tag];
        Arr[tag]=temp1;
        break;
        }
       Arrays.sort(Arr, tag+1, len);  
       System.out.println(Arr);      
       }        
  }
}

如果感觉哪里有问题,我没有考虑到的欢迎留言指正。


おすすめ

転載: blog.csdn.net/mad_sword/article/details/79828730