记录每日LeetCode 2544.交替数字和 Java实现

题目描述:

给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号:

    最高有效位 上的数字分配到 号。
    剩余每位上数字的符号都与其相邻数字相反。

返回所有数字及其对应符号的和。

初始代码:

class Solution {
    public int alternateDigitSum(int 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:使用String转换并遍历
// 空间复杂度:O(1)。定义了四个常量
// 时间复杂度:O(N)。其中N为n的长度
class Solution {
    public int alternateDigitSum(int n) {
        String s = n + "";
        int sum = 0;
        boolean flag = true;
        for(int i = 0; i < s.length(); ++i) {
            int c = s.charAt(i) - '0';
            if(flag) {
                sum = sum + c;
            } else {
                sum = sum - c;
            }
            flag = !flag;
        }
        return sum;
    }
}
// 使用栈思想:先余10进去放入栈的数就表示越右位
// 空间复杂度:O(1)。定义了四个变量
// 时间复杂度:O(N)。N取决于n的长度
class Solution {
    public int alternateDigitSum(int n) {
        Stack stack = new Stack();
        boolean flag = true;
        int a = 0;
        int sum = 0;
        while(n > 0) {
            a = n % 10;
            n = n / 10;
            stack.push(a);
        }
        while(stack.size() > 0) {
            int value = stack.pop();
            if(flag) {
                sum = sum + value;
            } else {
                sum = sum - value;
            }
            flag = !flag;
        }
        return sum;
    }
}

你可能感兴趣的:(leetcode,算法,职场和发展)