力扣经典题目之2283. 判断一个数的数字计数是否等于数位的值
今天继续给大家分享一道力扣的做题心得今天这道题目是
题目链接:
2283. 判断一个数的数字计数是否等于数位的值
题目如下:
给你一个下标从 0 开始长度为 n
的字符串 num
,它只包含数字。
如果对于 每个 0 <= i < n
的下标 i
,都满足数位 i
在 num
中出现了 num[i]
次,那么请你返回 true
,否则返回 false
。
1,题目分析
此题解题代码不难,但是在题目理解上有一些难点,下面是理解题目的要点。
要点:
根据题目的给出例子可以看到我们是需要确定再给出的这个数字数组中数组的索引出现了对应的 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,解题思路
题解代码:
class Solution {
private int[] f = new int[10];
public boolean digitCount(String num) {
int n = num.length();
for (int i = 0; i < n; ++i) {
f[num.charAt(i) - '0']++;
}
for (int i = 0; i < n; ++i) {
if (f[i] != num.charAt(i) - '0') {
return false;
}
}
return true;
}
}
-
理解问题:
- 输入是一个只包含数字的字符串
num
。 - 对于每个下标
i
,num[i]
表示数位i
在字符串中应该出现的次数。 - 需要验证字符串中的每个数位是否满足这个条件。
- 输入是一个只包含数字的字符串
-
使用数组统计数位出现次数:
- 创建一个长度为10的数组
f
,用来统计每个数位(0到9)在字符串中实际出现的次数。 - 遍历字符串
num
,对于每个字符num.charAt(i)
,将其转换为对应的整数(通过减去字符'0'
),然后在数组f
中相应位置加1。
- 创建一个长度为10的数组
-
验证条件:
- 再次遍历字符串
num
,对于每个下标i
,检查数组f[i]
是否等于num.charAt(i) - '0'
。 - 如果有任何一个下标不满足条件,则返回
false
。 - 如果所有下标都满足条件,则返回
true
。
- 再次遍历字符串
4,代码细节分析
- 数组
f
的初始化:int[] f = new int[10]
,数组的索引从0到9,分别对应数位0到9。 - 字符转换为整数:
num.charAt(i) - '0'
将字符转换为对应的整数。例如,字符'3'
减去'0'
的结果是整数3
。 - 计数:
f[num.charAt(i) - '0']++
增加对应数位的计数。 - 验证条件:
if (f[i] != num.charAt(i) - '0')
检查每个下标i
的条件是否满足。
3,总结
感谢大家的阅读,希望这篇解题心得能为大家带来一些收获,我们共同进步!大家的点赞就是我的动力谢谢大家,还有什么更优解或者问题欢迎大家在评论区讨论分享!