美文网首页
【算法题】1927. 求和游戏

【算法题】1927. 求和游戏

作者: 程序员小2 | 来源:发表于2023-02-28 22:29 被阅读0次

题目:

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

相关文章

  • 【算法题】1927. 求和游戏

    题目: Alice 和 Bob 玩一个游戏,两人轮流行动,Alice 先手 。 给你一个 偶数长度 的字符串 nu...

  • 算法题8.28:求和函数

    写一个求和的函数sum,达到下面的效果:// Should equal 15sum(1, 2, 3, 4, 5);...

  • 剑指Offer算法题-求和

    题目: 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以...

  • Java 算法 - 约翰的生意(线段树)

    题意 样例 1.解题思路   这是一道非常典型的线段树题。之前我也做过类似的题,Java 算法-区间求和I(线段树...

  • LeetCode268.缺失数字

    原题链接 求和公式求和 减去 遍历数组求和 = 缺少了几

  • 排序算法

    前言: 排序算法是面试经常考的题,游戏开发对算法是非常看重的,不说你了解所有算法,但是基本的排序算法是必须掌握的基...

  • 算法把我的代码缩减了三倍

    下午上完课后做了一道算法题, 百无聊赖 想着, 我之前Java阶段做的游戏是逻辑游戏 现在学了一些算法 是不是之前...

  • Android面经| 算法题解

    整理了校招面试算法题,部分《剑指offer》算法题,以及LeetCode算法题,本博文中算法题均使用Java实现校...

  • 算法题之: 三数求和并去重

    题目:对于一个整数的数组, 是否存在a, b, c 使得 a + b + c = 0, 返回a b c 数组 相同...

  • 算法题--跳步游戏II

    0. 链接 题目链接 1. 题目 Given an array of non-negative integers,...

网友评论

      本文标题:【算法题】1927. 求和游戏

      本文链接:https://www.haomeiwen.com/subject/hdqrldtx.html