2544. 交替数字和
难度: 简单
来源: 每日一题 2023.07.12
给你一个正整数 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
class Solution {
public int alternateDigitSum(int n) {
}
}
分析与题解
-
字符串分割暴力法
字符串分割暴力法就是利用转成字符串,然后利用API进行字符串分割,再进行遍历进行数据添加整合.
整体如下所示.
class Solution { public int alternateDigitSum(int n) { // 使用字符串暴力解决 String numberString = "" + n; String[] wordsArray = numberString.split(""); int length = wordsArray.length; int result = 0; for (int i = 0; i < length; i++ ) { if (i % 2 == 0) { result += Integer.valueOf(wordsArray[i]); } else { result -= Integer.valueOf(wordsArray[i]); } } return result; } }
复杂度分析:
- 时间复杂度: O(n)
- 空间复杂度: O(1)
结果如下所示.
效率过低了...
-
无需反转解法
这种解法是对官方解法的一种优化,官方的需要记录反转,但是这种解法不需要,又是一次骚操作...
从低位到高位遍历正整数的各位数字时,用当前位的数字减去前面低位的数字交替和。等遍历到最高位的时候,最高有效位上的数字分配到的符号正好是正号,所以就不需要另外用符号变量sign来保证各位数字分配到相应的正号或负号。
class Solution { public int alternateDigitSum(int n) { int result = 0; while(n > 0) { result = n%10 - result; n = n/10; } return result; } }
复杂度分析:
- 时间复杂度: O(n)
- 空间复杂度: O(1)
结果如下所示.
Comments | 0 条评论