題目:給定一個(gè)正整數(shù),實(shí)現(xiàn)一個(gè)方法來(lái)求出離該整數(shù)最近的大于自身的“換位數(shù)”。
換位數(shù):把一個(gè)整數(shù)各個(gè)數(shù)位的數(shù)字進(jìn)行全排列,從而得到新的整數(shù)。
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: Main
* Author: simonzhu
* Date: 2018/4/9 下午5:21
* Description: Just for ceshi
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改時(shí)間 版本號(hào) 描述
*/
import java.util.Arrays;
import java.util.Scanner;
/**
* 〈一句話功能簡(jiǎn)述〉<br>
* 〈Just for ceshi〉
*
* @author simonzhu
* @create 2018/4/9
* @since 1.0.0
*/
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("輸入你需要轉(zhuǎn)換的數(shù):");
while (scanner.hasNext()){
System.out.println("獲取到的換位數(shù)為:");
String[] numsStr = scanner.nextLine().split("");
int[]nums = new int[numsStr.length];
for (int i = 0,len=nums.length; i <len ; i++) {
nums[i]=Integer.valueOf(numsStr[i]);
}
System.out.println(Arrays.toString(getHuanWeiNum(nums)));
System.out.println("輸入你需要轉(zhuǎn)換的數(shù):");
}
}
private static int[] getHuanWeiNum(int[] nums) {
int no=getNo(nums);
if (no==0){
return nums;
}
exchangeNum(nums,no-1);
reserveNum(nums,no-1);
return nums;
}
private static int[] reserveNum(int[] nums, int no) {
for (int i = no+1,len=nums.length,j=len-1,temp; i<j; i++,j--) {
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
return nums;
}
private static int[] exchangeNum(int[] nums, int no) {
for (int len=nums.length,i=len-1,temp; i >0; i--) {
if (nums[no]<nums[i]){
temp=nums[no];
nums[no]=nums[i];
nums[i]=temp;
return nums;
}
}
return nums;
}
private static int getNo(int[] nums) {
for (int len=nums.length,i=len-1; i >0; i--) {
if(nums[i]>nums[i-1]){
return i;
}
}
return 0;
}
}
注:以上解法出自微信公眾號(hào)《程序員小灰》中2018.04.09發(fā)布的《漫畫(huà):什么是字典序算法?》一文