给一个正整数,返回比它大的数

题目描述

定义一个方法,给出一个正整数n,返回比该数大,且具备相同的数字的整数,示例:java

Kata.nextBiggerNumber(12)==21 
Kata.nextBiggerNumber(513)==531
Kata.nextBiggerNumber(2017)==2071

若是没有比给定的数大的话,则返回-1,示例:git

Kata.nextBiggerNumber(9)==-1 
Kata.nextBiggerNumber(111)==-1
Kata.nextBiggerNumber(531)==-1

解题思路

  1. 若是 n 小于等于 10 时,直接返回 -1 ;
  2. 若是 n 大于 10 ,将 n 拆分为单个数字,并排序,获取最大值 m   * 若是 n 等于 m ,则返回 -1    * 若是 n 不等于 m,以 n 小于 m 为条件,循环并 n 递加 1 为 x ,对 x 排序去最大值 y,当知足 y 等于 m 即 y 全部的数字与 n 全部的数字相同,且 x 大于 n,此时获得结果 y

代码实现

public class Kata {

    private static long bigger(long num) {
        char[] cs = String.valueOf(num).toCharArray();
        for (int i = 0; i < cs.length; i++) {
            for (int j = 0; j < i; j++) {
                if (cs[j] < cs[i]) {
                    char tmp = cs[i];
                    cs[i] = cs[j];
                    cs[j] = tmp;
                }
            }
        }
        return Long.parseLong(String.valueOf(cs));
    }

    public static long nextBiggerNumber(long n) {
        if (n <= 10) {
            return -1;
        }

        long bigNum = bigger(n);
        if (n == bigNum) {
            return -1;
        }

        long i = n;
        while (i < bigNum) {
            if (bigger(i) == bigNum && i > n) {
                return i;
            }
            i++;
        }
        return -1;
    }
}

题目来源:http://www.codewars.com/kata/next-smaller-number-with-the-same-digitscode

相关文章
相关标签/搜索