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

题目描述

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

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

如果没有比给定的数大的话,则返回-1,示例:

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-digits

转载于:https://my.oschina.net/u/215547/blog/808282

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值