力扣最小和分割

1.问题

给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:

  • num1 和 num2 直接连起来,得到 num 各数位的一个排列。
    • 换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。
  • num1 和 num2 可以包含前导 0 。

请你返回 num1 和 num2 可以得到的和的 最小 值。

2.解题思路

将数字拆分,按照升序排序,然后奇数位数字和奇数位数字,偶数位数字和偶数位数字组合,相加,就是最小的值

3.代码(java)

public int splitNum(int num) {
    //新建一个list集合
    ArrayList list = new ArrayList<>();
    while (num!=0){
        list.add(num % 10);//求余的结果,是个位数,将个位数放到集合当中
        num = num / 10;//因为个位数已经放入集合,所以去除个位数
    }
    //将list集合排序
    Collections.sort(list);
    int num1=0;
    int num2=0;
    for (int i = 0; i < list.size(); i++) {
        if (i%2==0){//当前数据位于奇数位
            num1=num1*10+list.get(i);
        }else {
            num2=num2*10+list.get(i);
        }
    }
    return num1+num2;
}

4.总结

将数字排序,奇数位和奇数位组合,偶数位和偶数位组合,求得和一定是最小的,排序完成后,第一位和第二个数字是最小的,分别将这两为基础,进行拼接.

你可能感兴趣的:(java)