题目
You have to create a function that takes a positive integer number and returns the next bigger number formed by the same digits:
Kata.nextBiggerNumber(12)==21
Kata.nextBiggerNumber(513)==531
Kata.nextBiggerNumber(2017)==2071
If no bigger number can be composed using those digits, return -1:
Kata.nextBiggerNumber(9)==-1
Kata.nextBiggerNumber(111)==-1
Kata.nextBiggerNumber(531)==-1
题解
题意大概是找到一个数组成数字相同的,大一点的那个数。
实际上只要使用程序将我们解决这道题的思路翻译一遍就行了,先找出最低的可以变大的位(这个位的更低位有一个尽量小,但是比他大的数),交换后,将比他低的位从小到大排序。
import java.util.*; public class Kata { public static long nextBiggerNumber(long n) { char[] s = Long.valueOf(n).toString().toCharArray(); boolean flag = false; for (int i=s.length-1;i>=0;i--) { int pos = -1; for (int j=s.length-1;j>i;j--) { if (s[j] > s[i] && (pos == -1 || s[j] < s[pos])) { pos = j; } } if (pos != -1) { char t = s[pos]; s[pos] = s[i]; s[i] = t; Arrays.sort(s,i+1,s.length); flag = true; break; } } if (flag == false) return -1; else return Long.valueOf(new String(s)).longValue(); } }