题目描述
定义一个方法,给出一个正整数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
解题思路
- 如果 n 小于等于 10 时,直接返回 -1 ;
- 如果 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