美文网首页
字典序算法

字典序算法

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

相关文章

  • 字典序算法

    题目:给定一个正整数,实现一个方法来求出离该整数最近的大于自身的“换位数”。 换位数:把一个整数各个数位的数字进行...

  • 字典序算法

    背景 今天群里有人问了一个问题:取出刚刚好大于自己的换位数(后来才知道这就是"字典序算法"),然后自己思考了一下用...

  • 字典序算法笔记

    一、相关概念介绍 字典序字典序就是按照字典中出现的顺序对字符进行排序。 全排列给定多个字符,可以按照任意顺序进行排...

  • bigger is greater

    heckerrank 算法题。 原题地址 此题大意为找到,字典序的下一个最小序列。 input output 通过...

  • 字典序

  • 字典序

    字典序 题目原链接:https://www.nowcoder.com/practice/6c9d8d2e426c4...

  • [HBase] - 理解 HBase Rowkey 字典排序

    我们都知道 HBase 的数据根据 rowkey 字典序排序的,理解这个概念很重要。 先理解名词 - 「字典序」 ...

  • 算法:树

    树的常用算法先序、中序、后序递归算法: 层序递归算法:参考:https://blog.csdn.net/qq_38...

  • Leetcode-Easy 953. Verifying an

    题目描述 给定一组单词和字母顺序,然后判断单词之间是否按字典序顺序排序。 字典序的理解:设想一本英语字典里的单词,...

  • 算法 - 字典

    字典 与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储 ES6中有字典,名为Map 字典的...

网友评论

      本文标题:字典序算法

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