class Solution {
public:
int splitNum(int num) {
}
};
6312. 最小和分割
给你一个正整数 num
,请你将它分割成两个非负整数 num1
和 num2
,满足:
num1
和 num2
直接连起来,得到 num
各数位的一个排列。
num1
和 num2
中所有数字出现的次数之和等于 num
中所有数字出现的次数。num1
和 num2
可以包含前导 0 。请你返回 num1
和 num2
可以得到的和的 最小 值。
注意:
num
保证没有前导 0 。num1
和 num2
中数位顺序可以与 num
中数位顺序不同。
示例 1:
输入:num = 4325 输出:59 解释:我们可以将 4325 分割成num1
= 24 和 num2=
35 ,和为 59 ,59 是最小和。
示例 2:
输入:num = 687 输出:75 解释:我们可以将 687 分割成num1
= 68 和num2
= 7 ,和为最优值 75 。
提示:
10 <= num <= 109
原站题解
php 解法, 执行用时: 8 ms, 内存消耗: 19 MB, 提交时间: 2023-10-09 07:48:40
class Solution { /** * @param Integer $num * @return Integer */ function splitNum($num) { $ans=[]; while($num!=0){ $ans[]=$num%10; $num=floor($num/10); } sort($ans); $a=0; $b=0; for($i=0;$i<count($ans);$i+=2){ $a=$a*10+$ans[$i]; if($i==count($ans)-1)break; $b=$b*10+$ans[$i+1]; } return $a+$b; } }
rust 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-10-09 07:48:26
impl Solution { pub fn split_num(mut num: i32) -> i32 { let mut ans=Vec::with_capacity(10); while num!=0 { ans.push(num%10); num/=10; } ans.sort(); let mut a=0; let mut b=0; for i in (0..ans.len()).step_by(2) { a=a*10+ans[i]; if i==ans.len()-1 { break; } b=b*10+ans[i+1]; } a+b } }
javascript 解法, 执行用时: 56 ms, 内存消耗: 41.2 MB, 提交时间: 2023-10-09 07:47:32
/** * @param {number} num * @return {number} */ var splitNum = function(num) { const stnum = [...String(num)].map(Number).sort((a, b) => a - b); let num1 = 0, num2 = 0; stnum.forEach((val, i) => { i % 2 == 0 ? num1 = num1 * 10 + val : num2 = num2 * 10 + val; }); return num1 + num2; };
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.2 MB, 提交时间: 2023-10-09 07:47:13
class Solution { public: int splitNum(int num) { string stnum = to_string(num); sort(stnum.begin(), stnum.end()); int num1 = 0, num2 = 0; for (int i = 0; i < stnum.size(); ++i) { if (i % 2 == 0) { num1 = num1 * 10 + (stnum[i] - '0'); } else { num2 = num2 * 10 + (stnum[i] - '0'); } } return num1 + num2; } };
java 解法, 执行用时: 1 ms, 内存消耗: 38.5 MB, 提交时间: 2023-03-08 17:35:28
class Solution { public int splitNum(int num) { var s = Integer.toString(num).toCharArray(); Arrays.sort(s); var a = new int[2]; for (int i = 0; i < s.length; i++) a[i % 2] = a[i % 2] * 10 + s[i] - '0'; // 按照奇偶下标分组 return a[0] + a[1]; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-03-08 17:35:13
func splitNum(num int) int { s := []byte(strconv.Itoa(num)) sort.Slice(s, func(i, j int) bool { return s[i] < s[j] }) a := [2]int{} for i, c := range s { a[i%2] = a[i%2]*10 + int(c-'0') // 按照奇偶下标分组 } return a[0] + a[1] }
python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2023-03-08 09:41:26
class Solution: def splitNum(self, num: int) -> int: s = sorted(str(num)) return int(''.join(s[::2])) + int(''.join(s[1::2]))