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 } }