Problem

You are given an array of positive integers nums.

Alice and Bob are playing a game. In the game, Alice can choose either all single-digit numbers or all double-digit numbers from nums, and the rest of the numbers are given to Bob. Alice wins if the sum of her numbers is strictly greater than the sum of Bob’s numbers.

Return true if Alice can win this game, otherwise, return false.

https://leetcode.cn/problems/find-if-digit-game-can-be-won/

Example 1:

Input: nums = [1,2,3,4,10]
Output: false
Explanation:
Alice cannot win by choosing either single-digit or double-digit numbers.

Example 2:

Input: nums = [1,2,3,4,5,14]
Output: true
Explanation:
Alice can win by choosing single-digit numbers which have a sum equal to 15.

Example 3:

Input: nums = [5,5,5,25]
Output: true
Explanation:
Alice can win by choosing double-digit numbers which have a sum equal to 25.

Constraints:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 99

Test Cases

1
2
class Solution:
def canAliceWin(self, nums: List[int]) -> bool:
solution_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pytest

from solution import Solution


@pytest.mark.parametrize('nums, expected', [
([1,2,3,4,10], False),
([1,2,3,4,5,14], True),
([5,5,5,25], True),
])
class Test:
def test_solution(self, nums, expected):
sol = Solution()
assert sol.canAliceWin(nums) == expected

Thoughts

相当于判断所有一位数之和与所有两位数之和是否不相等。

Code

solution.py
1
2
3
class Solution:
def canAliceWin(self, nums: list[int]) -> bool:
return sum(v if v < 10 else -v for v in nums) != 0