/** * 给定一个数,返回这个数的上一个数 * 例如: * input:231 * return:213 * * input:54123 * return:53421 * * input:1324 * return:1243 * * * 基本思想: * 对给定的数data,按位从后往前找,将当前为定义为cur,当前位的上一位为pro 例如 321 如果cur为2 那么pro为1 * 直到找到cur>pro的时候,在从data最后一位向前找直到找到cur大于该位置的数为止,然后交换cur与该位置的数。 * 使用index记录cur+1位置 * 然后拼接从0到cur将数字进行拼接,同时从data的最后一位到index进行拼接 * 拼接后就是最终结果 * */ public class Get_up_num { private static void swap(char[]array,int i,int j){ char tmp=array[i]; array[i]=array[j]; array[j]=tmp; } public static int get_up_num(int data){ int cur,next,index=-1; int re=0; String str=data+""; char[] array = str.toCharArray(); for (int i=array.length-2;i>=0;i--){ cur=array[i]-'0'; next=array[i+1]-'0'; if(cur>next){ for(int j=array.length-1;j>i;j--){ if(cur>(array[j]-'0')){ swap(array,i,j); index=i+1; break; } } break; } } if(index==-1){ return data; } for(int i=0;i<index;i++){ re = re * 10 + (array[i]-'0'); } for(int i=array.length-1;i>=index;i--){ re =re*10+(array[i]-'0'); } return re; } public static void main(String[] args) { int re=get_up_num(54123); System.out.println(re); } }
返回给定数的上一个数
最新推荐文章于 2022-05-24 15:39:19 发布