题目:给定一个正整数,实现一个方法来求出离该整数最近的大于自身的“换位数”。
换位数:把一个整数各个数位的数字进行全排列,从而得到新的整数。
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: Main
* Author: simonzhu
* Date: 2018/4/9 下午5:21
* Description: Just for ceshi
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
import java.util.Arrays;
import java.util.Scanner;
/**
* 〈一句话功能简述〉<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("输入你需要转换的数:");
while (scanner.hasNext()){
System.out.println("获取到的换位数为:");
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("输入你需要转换的数:");
}
}
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;
}
}
注:以上解法出自微信公众号《程序员小灰》中2018.04.09发布的《漫画:什么是字典序算法?》一文
网友评论