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