Skip to main content
Back to problems
#2578
Easy Algorithms

Split with minimum sum

Math Greedy Sorting
73.3% acceptance
Feb 25, 2026
426
35
Given a positive integer num, split it into two non-negative integers num1 and num2 such that: The concatenation of num1 and num2 is a permutation of num. In other words, the sum of the number of occurrences of each digit in num1 and num2 is equal to the number of occurrences of that digit in num. num1 and num2 can contain leading zeros. Return the minimum possible sum of num1 and num2. Notes: It is guaranteed that num does not contain any leading zeros. The order of occurrence of the digits in num1 and num2 may differ from the order of occurrence of num.

Solution

Rust
Time O(n log n)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn split_num(num: i32) -> i32 {
    // Sort digits ascending, alternate between num1 and num2
    let mut digits: Vec<u8> = num.to_string().bytes().map(|b| b - b'0').collect();
    digits.sort_unstable();
    let mut num1 = 0i64;
    let mut num2 = 0i64;
    for (i, &d) in digits.iter().enumerate() {
      if i % 2 == 0 {
        num1 = num1 * 10 + d as i64;
      } else {
        num2 = num2 * 10 + d as i64;
      }
    }
    (num1 + num2) as i32
  }
}