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

【算法题】1927. 求和游戏

题目:

Alice 和 Bob 玩一个游戏,两人轮流行动,Alice 先手 。

给你一个 偶数长度 的字符串 num ,每一个字符为数字字符或者 ‘?’ 。每一次操作中,如果 num 中至少有一个 ‘?’ ,那么玩家可以执行以下操作:

选择一个下标 i 满足 num[i] == ‘?’ 。
将 num[i] 用 ‘0’ 到 ‘9’ 之间的一个数字字符替代。
当 num 中没有 ‘?’ 时,游戏结束。

Bob 获胜的条件是 num 中前一半数字的和 等于 后一半数字的和。Alice 获胜的条件是前一半的和与后一半的和 不相等 。

比方说,游戏结束时 num = “243801” ,那么 Bob 获胜,因为 2+4+3 = 8+0+1 。如果游戏结束时 num = “243803” ,那么 Alice 获胜,因为 2+4+3 != 8+0+3 。
在 Alice 和 Bob 都采取 最优 策略的前提下,如果 Alice 获胜,请返回 true ,如果 Bob 获胜,请返回 false 。

示例 1:

输入:num = “5023”
输出:false
解释:num 中没有 ‘?’ ,没法进行任何操作。
前一半的和等于后一半的和:5 + 0 = 2 + 3 。
示例 2:

输入:num = “25??”
输出:true
解释:Alice 可以将两个 ‘?’ 中的一个替换为 ‘9’ ,Bob 无论如何都无法使前一半的和等于后一半的和。
示例 3:

输入:num = “?3295???”
输出:false
解释:Bob 总是能赢。一种可能的结果是:

  • Alice 将第一个 ‘?’ 用 ‘9’ 替换。num = “93295???” 。
  • Bob 将后面一半中的一个 ‘?’ 替换为 ‘9’ 。num = “932959??” 。
  • Alice 将后面一半中的一个 ‘?’ 替换为 ‘2’ 。num = “9329592?” 。
  • Bob 将后面一半中最后一个 ‘?’ 替换为 ‘7’ 。num = “93295927” 。
    Bob 获胜,因为 9 + 3 + 2 + 9 = 5 + 9 + 2 + 7 。

提示:

2 <= num.length <= 10^5
num.length 是 偶数 。
num 只包含数字字符和 ‘?’ 。

java代码:

class Solution {public boolean sumGame(String num) {int len = num.length();//1,为Alice采取左边尽可能小,2,Alice采取左边尽可能大int l1 = 0, r1 = 0, l2 = 0, r2 = 0, m = len / 2;int flag = 0;for(int i = 0; i < len; i++){char c = num.charAt(i);if(i < m){if(c == '?'){if(flag == 0){l2 += 9;flag = 1;}else{l1 += 9;flag = 0;}}else{l1 += c - '0';l2 += c - '0';}}else{if(c == '?'){if(flag == 0){r1 += 9;flag = 1;}else{r2 += 9;flag = 0;}}else{r1 += c - '0';r2 += c - '0';}}}return !(l1 >= r1 && l2 <= r2);}
}
http://www.lryc.cn/news/25353.html

相关文章:

  • 有趣的 Kotlin 0x10:操作符 ..<
  • mysql数据库之索引使用原则
  • 【Java】Spring Boot 日志文件
  • 软件项目管理计算题复习(1)
  • BMI160 BOSCH/博世 六轴 加速度 陀螺仪 传感器
  • ROS探索[wpr_simulation的编译]
  • 连接Oracle数据库失败(ORA-12514)故障排除
  • DevOps 学习笔记(一) | DevOps 简介及环境搭建
  • 日志收集笔记(Filebeat 日志收集、Logstash 日志过滤)
  • 字节二面,原来是我对自动化测试的理解太浅薄了..
  • 2023雅虎邮箱不能注册?别急,这份教程教你成功注册雅虎邮箱
  • Elasticsearch 自动补全 completion type
  • GB28181协议实现源码Android源码
  • HNU工训中心: 三人表决器及八人抢答器实验报告
  • split()用法注意事项
  • centos7配置静态网络常见问题归纳
  • 产品经理修炼指南【01】
  • NCRE计算机等级考试Python真题(十一)
  • cglib代理解析
  • GFD563A101 3BHE046836R0101
  • SAP 采购定价过程字段解析
  • 一篇搞懂tcp,http,socket,socket连接池之间的关系
  • 【JavaSE】对象的比较
  • Leetcode DAY 49~50:买卖股票的最佳时机 1 2 3 4
  • Android Handler机制(二) Handler 实现原理
  • Elasticsearch教程(19) 详解mapping之keyword
  • LeetCode算法复杂度分析(时间复杂度空间复杂度)
  • Android OpenCV(七十三):吊打高斯模糊的StackBlur Android 实践
  • 4.排序算法之一:冒泡排序
  • python自学之《21天学通Python》(16)——第19章 用Pillow库处理图片