拆分数位后四位数字的最小和
难度:
标签:
题目描述
代码结果
运行时间: 19 ms, 内存: 16.0 MB
/*
* 思路:
* 1. 使用Java Stream提取和排序每一位数字。
* 2. 组合排序后的数字,使它们的和最小。
* 3. 返回这两个数的和。
*/
import java.util.stream.IntStream;
import java.util.stream.Collectors;
import java.util.Arrays;
public class Solution {
public int minimumSum(int num) {
// 提取每一位数字并排序
int[] digits = Arrays.stream(String.valueOf(num).split("")).mapToInt(Integer::parseInt).sorted().toArray();
// 组合成两个数
int new1 = digits[0] * 10 + digits[2];
int new2 = digits[1] * 10 + digits[3];
// 返回和
return new1 + new2;
}
}
解释
方法:
首先,将整数num转换为字符串并将其每个字符存入一个列表中。接着,对这个列表进行排序,这样可以确保较小的数字排在前面,有利于构成较小的新整数。为了得到两个可能的最小整数,采用交错取数的方式,即从排序后的列表中,依次选择索引为偶数的元素构成一个新整数(new1),索引为奇数的元素构成另一个新整数(new2)。最后,将这两个新整数从字符串转换为整数并求和。
时间复杂度:
O(1)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么选择将数字转换为字符串并对其字符进行排序,这样的排序有什么特别的目的吗?
▷🦆
在构造新整数时,为什么采用交错取数的方式,即索引为偶数的元素构成一个新整数,索引为奇数的元素构成另一个新整数?这种方法是如何帮助实现最小和的?
▷🦆
对于有相同数位的情况,例如'2222',这种方法是否还能保证得到最小和,为什么?
▷🦆
这种方法在处理可能的前导0时有什么特殊的处理吗?例如在示例2中输入为'40',输出是否会影响整数的值?
▷