Welcome to Subscribe On Youtube

2544. Alternating Digit Sum

Description

You are given a positive integer n. Each digit of n has a sign according to the following rules:

  • The most significant digit is assigned a positive sign.
  • Each other digit has an opposite sign to its adjacent digits.

Return the sum of all digits with their corresponding sign.

 

Example 1:

Input: n = 521
Output: 4
Explanation: (+5) + (-2) + (+1) = 4.

Example 2:

Input: n = 111
Output: 1
Explanation: (+1) + (-1) + (+1) = 1.

Example 3:

Input: n = 886996
Output: 0
Explanation: (+8) + (-8) + (+6) + (-9) + (+9) + (-6) = 0.

 

Constraints:

  • 1 <= n <= 109

 

Solutions

Solution 1: Simulation

We can directly simulate the process as described in the problem.

We define an initial symbol $sign=1$. Starting from the most significant digit, we take out one digit $x$ each time, multiply it by $sign$, add the result to the answer, then negate $sign$, and continue to process the next digit until all digits are processed.

The time complexity is $O(\log n)$, and the space complexity is $O(\log n)$. Here, $n$ is the given number.

  • class Solution {
        public int alternateDigitSum(int n) {
            int ans = 0, sign = 1;
            for (char c : String.valueOf(n).toCharArray()) {
                int x = c - '0';
                ans += sign * x;
                sign *= -1;
            }
            return ans;
        }
    }
    
  • class Solution {
    public:
        int alternateDigitSum(int n) {
            int ans = 0, sign = 1;
            for (char c : to_string(n)) {
                int x = c - '0';
                ans += sign * x;
                sign *= -1;
            }
            return ans;
        }
    };
    
  • class Solution:
        def alternateDigitSum(self, n: int) -> int:
            return sum((-1) ** i * int(x) for i, x in enumerate(str(n)))
    
    
  • func alternateDigitSum(n int) (ans int) {
    	sign := 1
    	for _, c := range strconv.Itoa(n) {
    		x := int(c - '0')
    		ans += sign * x
    		sign *= -1
    	}
    	return
    }
    
  • function alternateDigitSum(n: number): number {
        let ans = 0;
        let sign = 1;
        while (n) {
            ans += (n % 10) * sign;
            sign = -sign;
            n = Math.floor(n / 10);
        }
        return ans * -sign;
    }
    
    
  • impl Solution {
        pub fn alternate_digit_sum(mut n: i32) -> i32 {
            let mut ans = 0;
            let mut sign = 1;
            while n != 0 {
                ans += (n % 10) * sign;
                sign = -sign;
                n /= 10;
            }
            ans * -sign
        }
    }
    
    

All Problems

All Solutions