来源:力扣(LeetCode)
描述:
给你一个正整数 n
。n
中的每一位数字都会按下述规则分配一个符号:
- 最高有效位 上的数字分配到 正 号。
- 剩余每位上数字的符号都与其相邻数字相反。
返回所有数字及其对应符号的和。
示例 1:
输入:n = 521
输出:4
解释:(+5) + (-2) + (+1) = 4
示例 2:
输入:n = 111
输出:1
解释:(+1) + (-1) + (+1) = 1
示例 3:
输入:n = 886996
输出:0
解释:(+8) + (-8) + (+6) + (-9) + (+9) + (-6) = 0
提示:
- 1 <= n <= 109
方法:数学
思路与算法
给你一个正整数 n,要求计算 n 的数字交替和。
我们用 sign 来表示数字的正负,并初始化为 1。每一步中,我们将 n 对 10 取模,得到个位数字,把它和 sign 相乘求和,将 sign 取相反数,再把 n 除以 10。 不断重复这一步骤,直到 n 为零。这样我们就得到了数字交替和。
最后,因为最高有效位上的数字分配到正号,我们将结果乘以 −sign 后返回。
代码:
class Solution {
public:
int alternateDigitSum(int n) {
int res = 0, sign = 1;
while (n > 0) {
res += n % 10 * sign;
sign = -sign;
n /= 10;
}
return -sign * res;
}
};
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.8 MB, 在所有 C++ 提交中击败了63.93%的用户
复杂度分析
时间复杂度:O(logn)。取决于 n 的数字位数。
空间复杂度:O(1)。
author:LeetCode-Solution