当前位置: 首页 > news >正文

力扣-3232. 判断是否可以赢得数字游戏

给你一个 正整数 数组 nums

Alice 和 Bob 正在玩游戏。在游戏中,Alice 可以从 nums 中选择所有个位数  所有两位数,剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和,则 Alice 获胜。

如果 Alice 能赢得这场游戏,返回 true;否则,返回 false

示例 1:

输入:nums = [1,2,3,4,10]

输出:false

解释:

Alice 不管选个位数还是两位数都无法赢得比赛。

示例 2:

输入:nums = [1,2,3,4,5,14]

输出:true

解释:

Alice 选择个位数可以赢得比赛,所选数字之和为 15。

示例 3:

输入:nums = [5,5,5,25]

输出:true

解释:

Alice 选择两位数可以赢得比赛,所选数字之和为 25。

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 99
class Solution:def canAliceWin(self, nums: List[int]) -> bool:return sum(x if x < 10 else -x for x in nums) != 0

解释

  1. 定义函数和类:

    • class Solution: 定义一个类Solution
    • def canAliceWin(self, nums: List[int]) -> bool: 定义类中的方法canAliceWin,接收一个整数数组nums,返回一个布尔值。
  2. 计算总和:

    • sum(x if x < 10 else -x for x in nums): 这是一个生成器表达式,它遍历nums中的每个元素x,并根据条件对每个元素进行处理。
      • x if x < 10 else -x: 如果x是个位数(即x < 10),则直接取它的值x。否则,取它的负值-x(即两位数取负值)。
      • sum(...): 将上述条件处理后的所有值求和。
  3. 比较结果:

    • sum(x if x < 10 else -x for x in nums) != 0: 比较计算出的总和是否不等于0。
      • 如果不等于0,返回True,表示Alice可以赢得比赛。
      • 如果等于0,返回False,表示Alice不能赢得比赛。

思路解释

这段代码的核心思想是计算Alice选择的所有个位数的总和与Bob选择的所有两位数的总和之间的差异:

  • 如果Alice选择所有个位数,她的得分就是所有个位数的和。
  • 如果Alice选择所有两位数,她的得分就是所有两位数的和。

通过将个位数保留原值(x if x < 10)并将两位数取负值(-x),我们可以通过求和来快速判断两者的总和是否相等:

  • 如果sum(x if x < 10 else -x for x in nums)的结果不为0,说明Alice选择的某一类数字(个位数或两位数)的和与Bob的总和不同,Alice可以赢得比赛。
  • 如果结果为0,说明无论Alice选择哪一类数字,两者的总和都是一样的,Alice无法赢得比赛。

这段代码有效地利用了Python的生成器表达式和条件表达式来简化判断逻辑

http://www.lryc.cn/news/412032.html

相关文章:

  • Table SQL connectors以及FileSystem、JDBC connector
  • Animate软件基础:“分散到图层”创建的新图层
  • ffmpeg命令-Windows下常用最全
  • 反序列化漏洞靶机实战-serial
  • 医疗器械产品没有互联网连接,就不适用于网络安全要求吗?
  • 可视掏耳勺安全吗?独家揭示六大风险弊病!
  • JavaScript 变量声明var、let、const
  • ipvlan: operation not supported 导致的POD不断重启
  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 操作文件-Path
  • RAC(Teamcenter )开发,Bom行解包和打包的方法
  • log4j2漏洞练习
  • OpenEuler安装部署教程
  • Canto - hackmyvm
  • 【数据结构进阶】手撕红黑树
  • 【C++从小白到大牛】类和对象
  • Kafka 为什么这么快的七大秘诀,涨知识了
  • 一文解决3D车道线检测:最新单目3D车道线检测综述
  • 稳中向好,今年新招6000人
  • 使用kettle开源工具进行跨库数据同步
  • Golang | Leetcode Golang题解之第307题区域和检索-数组可修改
  • Golang | Leetcode Golang题解之第301题删除无效的括号
  • 【Story】《程序员面试的“八股文”辩论:技术基础与实际能力的博弈》
  • 初步了解泛型
  • 【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
  • C++推荐的oj网站
  • springmvc处理http请求的底层逻辑
  • 干货满满,从零到一:编程小白如何在大学成为编程大神?
  • 前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)
  • 零基础学习【Mybatis】这一篇就够了