前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【力扣算法06】之 _2544_ 交替数字和- python

【力扣算法06】之 _2544_ 交替数字和- python

作者头像
全栈若城
发布2024-02-29 19:11:34
970
发布2024-02-29 19:11:34
举报
文章被收录于专栏:若城技术专栏

问题描述

给你一个正整数 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 转换为字符串,这样方便逐位处理。然后,我们需要遍历每一位数字,并根据规则确定它的符号。
  • 在遍历过程中,我们可以使用一个变量 result 来保存结果,并初始化为 0。另外,我们还需要一个变量 sign 来保存当前位的符号,初始值设为 1。
  • 接下来,我们可以使用一个循环来遍历每一位数字。对于每一位数字,我们需要根据其相邻数字的符号来确定自己的符号。当位于最高有效位时,我们将其符号设为正号;而对于其他位的情况,我们将其符号与相邻数字的符号相反。
  • 将当前位的数字乘以符号,并累加到 result 中。完成遍历后,result 就是我们要求的所有数字及其对应符号的和。
  • 最后,我们返回 result 即可作为最终的结果。
  • 这样就完成了对给定正整数 n 的每一位数字求符号和的算法。可以使用上述提供的代码来实现和验证该算法。

代码分析

代码语言:javascript
复制
class Solution(object):
    def alternateDigitSum(self, n):

上述代码定义了一个名为 Solution 的类,并在其中定义了一个名为 alternateDigitSum 的方法。这个方法接受一个参数 n,表示正整数。

代码语言:javascript
复制
digits = str(n)

将正整数 n 转换为字符串类型,以便逐位处理。将转换后的字符串赋值给变量 digits

代码语言:javascript
复制
result = 0
sign = 1

初始化结果变量 result 和符号变量 sign,初始值分别为 0 和 1。

代码语言:javascript
复制
for i in range(len(digits)):

使用 range 函数遍历 digits 字符串中的每一个索引值 i

代码语言:javascript
复制
if i == 0:
    sign = 1
else:
    sign *= -1

如果当前索引 i 是最高有效位(即索引为 0),则将 sign 的值设为 1,表示正号。否则,将 sign 的值乘以 -1,表示与前一个数字的符号相反。

代码语言:javascript
复制
result += int(digits[i]) * sign

将当前索引 i 对应的字符转换为整数,并乘以 sign,然后加到 result 中。

代码语言:javascript
复制
return result

返回最终的结果 result

整体来看,该算法逐位遍历给定正整数的每一位数字,根据规则确定每个数字的符号,并将符号与数字相乘后累加到结果中。最终返回所有数字及其对应符号的和。

创建 Solution 类的对象,并调用 alternateDigitSum 方法来计算给定数值 n 的结果。

完整代码

代码语言:javascript
复制
class Solution(object):

     def alternateDigitSum(self,n):
        digits = str(n)  # 将正整数 n 转换为字符串类型,以便逐位处理

        result = 0  # 初始化结果变量为 0
        sign = 1  # 初始化符号变量为 1(表示正号)

        for i in range(len(digits)):  # 遍历字符串 digits 中的每一个索引值 i
            if i == 0:
                sign = 1  # 如果是最高有效位(即索引为 0),则将符号设为正号
            else:
                sign *= -1  # 否则,将符号与前一个数字的符号相反

            result += int(digits[i]) * sign  # 将当前位的数字乘以符号,并累加到结果中

        return result  # 返回最终结果

运行示例

代码语言:javascript
复制
# 示例用法
solution = Solution()
print(solution.alternateDigitSum(521))
print(solution.alternateDigitSum(111))
print(solution.alternateDigitSum(886996))
效果截图

完结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
    • 示例1
      • 示例 2
        • 示例 3
          • 提示
          • 思路分析
          • 代码分析
          • 完整代码
            • 运行示例
              • 效果截图
          • 完结
          相关产品与服务
          腾讯云代码分析
          腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档