美文网首页
基础一:全排列(给定数字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大的下一个数)

    全排列 给定一个数字n,输出由这个数字每一位所组成的数字中比n大的下一个。 输入: 输出: 思路: 暴力解法,将数...

  • 子集、全排列、第k个排列

    子集输出 全排列输出 存在重复数字的全排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大...

  • 全排列

    题目:给出一个数组,输出全部元素所有的排列结果 一、递归方法 数学思想:全排列个数为n的阶乘,数学记为n!即 n*...

  • 全排列系列总结

    一. 找到下一个全排列 这是给定一个排列,找它的下一个全排列 给出一个数字排列中按字典序排列的下一个更大的排列。如...

  • 康托展开及其逆运算实现 C++

    康托展开 康托展开 求一个数在其全排列的次序 规定a[n]为 在第n位后面且比其数值小的数字个数与 (n-1)! ...

  • 【Leetcode】【Python】268. Missing N

    问题描述: 给出从0到n的n+1个数字中的n个数,找到缺失的那个数字注意:给定的数组并不一定是有序的数组 代码示例...

  • 0022-排列

    问题描述 大家知道,给出正整数 n,则 1 到 n 这 n 个数可以构成 n!种排列,把这些排列按照从小到大的顺序...

  • 贪心算法删数问题

    删数问题 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设...

  • 全排列 嵌套循环转递归

    全排列给定一个数字列表,返回其所有可能的排列。 样例给出一个列表[1,2,3],其全排列为: [[1,2,3],[...

  • 排列类算法问题大总结

    全排列 带重复元素的排列 下一个排列 上一个排列 第 k 个排列 排列序号 排列序号II 全排列 给定一个数字列表...

网友评论

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

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