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)

    结果如下所示.


IT界无底坑洞栋主 欢迎加Q骚扰:676758285