2283. 判断一个数的数字计数是否等于数位的值
题目描述
给你一个下标从 0 开始长度为 n
的字符串 num
,它只包含数字。
如果对于 每个 0 <= i < n
的下标 i
,都满足数位 i
在 num
中出现了 num[i]
次,那么请你返回 true
,否则返回 false
。
示例 1:
输入:num = "1210" 输出:true 解释: num[0] = '1' 。数字 0 在 num 中出现了一次。 num[1] = '2' 。数字 1 在 num 中出现了两次。 num[2] = '1' 。数字 2 在 num 中出现了一次。 num[3] = '0' 。数字 3 在 num 中出现了零次。 "1210" 满足题目要求条件,所以返回 true 。
示例 2:
输入:num = "030" 输出:false 解释: num[0] = '0' 。数字 0 应该出现 0 次,但是在 num 中出现了两次。 num[1] = '3' 。数字 1 应该出现 3 次,但是在 num 中出现了零次。 num[2] = '0' 。数字 2 在 num 中出现了 0 次。 下标 0 和 1 都违反了题目要求,所以返回 false 。
提示:
n == num.length
1 <= n <= 10
num
只包含数字。
解法
方法一:计数 + 枚举
我们可以用一个长度为 $10$ 的数组 $\textit{cnt}$ 统计字符串 $\textit{num}$ 中每个数字出现的次数,然后再枚举字符串 $\textit{num}$ 中的每个数字,判断其出现的次数是否等于该数字本身。如果对于所有的数字都满足这个条件,那么返回 $\text{true}$,否则返回 $\text{false}$。
时间复杂度 $O(n)$,空间复杂度 $O(|\Sigma|)$。其中 $n$ 是字符串 $\textit{num}$ 的长度,而 $|\Sigma|$ 是数字的取值范围,即 $10$。
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|