正整数去重取最大值

import java.util.*;

/*
正整数去重之后取最大数
423234-->432
4423-->423
*/

public class Mian2 {

    public static void main(String[] args) {

        Scanner fin = new Scanner(System.in);

        // while (fin.hasNext()) {

        String str = fin.nextLine();

        // if (str.charAt(0) == '-') {
        // System.out.println(0);
        // break;
        // }
        Set<Character> set = new TreeSet<Character>();

        for (int i = 0; i < str.length(); i++) {
            set.add(str.charAt(i));
        }

        char[] c = new char[set.size()];

        Iterator<Character> it = set.iterator();
        int index = 0;
        while (it.hasNext()) {
            c[index] = it.next();
            index++;
        }

        List<Integer> list = new ArrayList<Integer>();
        permutation(c, 0, c.length - 1, list);
        System.out.println(list);
        //
        Object[] array = list.toArray();
        Arrays.sort(array);

        List<String> list1 = new ArrayList<String>();
        zuhe(str, list1, c.length);

        for (int i = array.length - 1; i >= 0; i--) {
            if (list1.contains(array[i].toString())) {
                System.out.println(array[i]);
                break;
            }
        }
        // }
    }

    // 字符组合
    public static void zuhe(String str, List<String> list, int length) {
        int count = (int) (Math.pow(2, str.length()) - 1);// 7

        for (int i = 1; i <= count; i++) {
            String ss = Integer.toBinaryString(i).toString();
            while (ss.length() < str.length()) {
                ss = "0" + ss;
            }
            StringBuffer sb = new StringBuffer();
            for (int j = 0; j < ss.length(); j++) {
                if (ss.charAt(j) == '1') {
                    sb.append(str.charAt(j));
                }
            }
            if (sb.length() == length) {
                list.add(sb.toString());
            }
            // System.out.print(sb + " ");
        }

    }

    // 字符排列
    public static void permutation(char[] s, int from, int to,
            List<Integer> list) {
        if (to <= 1)
            return;
        if (from == to) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < s.length; i++) {
                sb.append(s[i]);
            }
            list.add(Integer.parseInt(sb.toString()));
        } else {
            for (int i = from; i <= to; i++) {
                swap(s, i, from); // 交换前缀,使其产生下一个前缀
                permutation(s, from + 1, to, list);
                swap(s, from, i); // 将前缀换回,继续做上一个前缀的排列
            }
        }
    }

    public static void swap(char[] s, int i, int j) {
        char tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值