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

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

作者: I讨厌鬼I | 来源:发表于2019-05-07 21:46 被阅读0次

    全排列

    给定一个数字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;
        }
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/cvruoqtx.html