力扣每日一题2544. 交替数字和

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

最高有效位 上的数字分配到 正 号。
剩余每位上数字的符号都与其相邻数字相反。
返回所有数字及其对应符号的和。

输入:n = 521
输出:4
解释:(+5) + (-2) + (+1) = 4

思路1:可以分为偶数个数或者奇数个数,可以按照每一次%10和/10操作一次取出最后一位和删除最后一位,用flag记录符号位到最高位的时候如果符号为负则整体sum变负,如果符号为正则返回sum

因为每次置反 所以最后一次会出现 如果奇数整数则符号位为负,反之同理。每次循环结束的符号位就是下次的符号位,所以要置反求现在的符号位。

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

思路2:根据取对数找到这是几位整数,每次取出最后一位和删除最后一位,将num-- 如果num为偶数则此时符号位为负,如果为奇数则符号位为正

class Solution {
public:
    int alternateDigitSum(int n) {
        int flag=0;
        int num=log10(n)+1;
        long long sum=0;

        while(n){
            if(num%2==0){
                sum-=n%10;
            }
           else{
               sum+=n%10;
           }
         n=n/10;
         num--;
        }
        return sum;
    }
};

思路三:转化为字符串然后每步模拟

class Solution {
    public int alternateDigitSum(int n) {
        String s = String.valueOf(n);
        int len = s.length();
        int ans = 0;
        boolean flag = true;
        for (int i = 0; i < len; i++){
            ans += flag ? Integer.valueOf(s.charAt(i) - '0') : -Integer.valueOf(s.charAt(i) - '0');
            flag ^= true;
        }
        return ans;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值