Codewars Java练习:Next bigger number with the same digits

题目

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();
    }
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据