989. Add to Array-Form of Integer

For a non-negative integer X, the array-form of X is an array of its digits in left to right order.  For example, if X = 1231, then the array form is [1,2,3,1].

Given the array-form A of a non-negative integer X, return the array-form of the integer X+K.

 

Example 1:

Input: A = [1,2,0,0], K = 34
Output: [1,2,3,4]
Explanation: 1200 + 34 = 1234

Example 2:

Input: A = [2,7,4], K = 181
Output: [4,5,5]
Explanation: 274 + 181 = 455

Example 3:

Input: A = [2,1,5], K = 806
Output: [1,0,2,1]
Explanation: 215 + 806 = 1021

Example 4:

Input: A = [9,9,9,9,9,9,9,9,9,9], K = 1
Output: [1,0,0,0,0,0,0,0,0,0,0]
Explanation: 9999999999 + 1 = 10000000000

 

Noteļ¼š

  1. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 9
  3. 0 <= K <= 10000
  4. If A.length > 1, then A[0] != 0

Rust Solution

struct Solution;

impl Solution {
    fn add_to_array_form(mut a: Vec<i32>, mut k: i32) -> Vec<i32> {
        let mut i = a.len() - 1;
        while k > 0 {
            let sum = a[i] + k;
            a[i] = sum % 10;
            k = sum / 10;
            if i > 0 {
                i -= 1;
            } else {
                a.insert(0, 0);
            }
        }
        if a.len() > 1 && a[0] == 0 {
            a.remove(0);
        }
        a
    }
}

#[test]
fn test() {
    let a = vec![1, 2, 0, 0];
    let k = 34;
    let res = vec![1, 2, 3, 4];
    assert_eq!(Solution::add_to_array_form(a, k), res);
    let a = vec![2, 7, 4];
    let k = 181;
    let res = vec![4, 5, 5];
    assert_eq!(Solution::add_to_array_form(a, k), res);
    let a = vec![2, 1, 5];
    let k = 806;
    let res = vec![1, 0, 2, 1];
    assert_eq!(Solution::add_to_array_form(a, k), res);
    let a = vec![9, 9, 9, 9, 9, 9, 9, 9, 9, 9];
    let k = 1;
    let res = vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    assert_eq!(Solution::add_to_array_form(a, k), res);
}

Having problems with this solution? Click here to submit an issue on github.