基础一:全排列(给定数字n,给出比n大的下一个数)

2019-05-07  本文已影响0人  I讨厌鬼I

全排列

给定一个数字n,输出由这个数字每一位所组成的数字中比n大的下一个。

输入:

1234
1243

输出:

1243
1324

思路:

暴力解法,将数字n进行全排列,结果放进TreeSet中,然后遍历TreeSet,找到比n大的第一个返回。注意java中把char s[] = str.toCharArray()后进行交换,交换完毕后再用String.valueOf(s)返回全排列。

代码:

import java.util.TreeSet;
public class Solution {
    private TreeSet<String> set = new TreeSet();
    private String swap(String str, int i, int j){
        // toCharArray()变成字符数组后进行交换
        char s[] = str.toCharArray();
        char tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
        return String.valueOf(s);
    }
    private void fullPerm(String str, int i){
        //排到最后一位就加入TreeSet
        if (i == str.length()){
            set.add(str);
            return;
        }
        else {
            for (int j = i; j < str.length(); j++){
                str = swap(str, i, j);
                fullPerm(str, i + 1);
                str =swap(str, i, j);
            }
            return;
        }
    }
    public int next(int num){
        String str = String.valueOf(num);
        fullPerm(str, 0);
        int ans = -1;
        for (String res : set){
            if (Integer.parseInt(res) > num){
                ans = Integer.parseInt(res);
                break;
            }
        }
        return ans;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读