数字num中对应的圈数量是多少?
提示:本题是20220409美团笔试题1
整体的感觉就是:
平时扎实地训练,并打好基础,培养敏感度,是非常有必要。
当你见多识广,你一看考题就知道大概用什么样的数据结构去做,也知道用啥样的算法路程解决题目了。
题目
小团和小美在玩数圈游戏,游戏规则是这样的:
给出一个数字,小美需要立刻说出这个数字包含的圈圈的数量。
因为小团提问的频率非常快,小美希望你能帮她用程序来计算出来。
例如,对于数字0,包含1个圈,对于数字2,包含0个圈,对于数字8,包含2个圈。
我们给出对圈的认定标准如下表:arr
数字 | 圈数量 |
---|---|
0 | 1 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 1 |
7 | 0 |
8 | 2 |
9 | 1 |
输入描述
输入一行仅包含一个十进制整数n
对于80%的数据,n<=100000
对于20%的数据,n<=1000000000
输出描述
输出仅包含一个正整数,表示十进制数字n中的圈圈数
一、审题
题目很容易理解,就是给你一个数
比如:60498
去表格里面找,
6对应几个圈?1
0对应几个圈?1
4对应几个圈?0
9对应几个圈?1
8对应几个圈?2
求和得5,非常简单的题目
二、解题
当时我一看题目,瞬间就知道,这种和数字处理有关的题目,应该很简单的
既然有一个表,那就用哈希表对应起来,不过后来我想,不用申请哈希表了,直接用数组实现哈希表的功能
让数组arr=int[] arr = {1,0,0,0,0,0,1,0,2,1};//表示代表的圈数,下标i就是我们的原始数字
算法大流程
ans=0
输入一个字符串s,待会用ASCII码去转化数字即可
挨个遍历字符串s,累加ans+=arr[s[i] - ‘0’]就是结果
代码:
public static class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String num = in.next();
int[] arr = {1,0,0,0,0,0,1,0,2,1};//表示代表的圈数
//挨个判断字符
int ans = 0;
for (int i = 0; i < num.length(); i++) {
int bit = num.charAt(i) - '0';//转数字
ans += arr[bit];
}
System.out.println(ans);
}
}
总结
提示:本题借鉴知识点:
哈希表可以用arr表示
ACM格式的数字可以用字符串输入,基本就是各大大厂们考的第一题类型。考的就是你有没有coding的能力,没别的意思。