美文网首页
字典序算法

字典序算法

作者: 朱Simon | 来源:发表于2018-04-09 21:20 被阅读35次
    题目:给定一个正整数,实现一个方法来求出离该整数最近的大于自身的“换位数”。

    换位数:把一个整数各个数位的数字进行全排列,从而得到新的整数。

    /**
     * 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发布的《漫画:什么是字典序算法?》一文

    相关文章

      网友评论

          本文标题:字典序算法

          本文链接:https://www.haomeiwen.com/subject/lcdwhftx.html