給一個正整數,返回比它大的數

題目描述

定義一個方法,給出一個正整數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

相關文章
相關標籤/搜索