Java 检查给定的编号是否正在生成
我正在做一个关于Geeksforgek的问题,我提出了一个问题 给定一个数字,你的任务是检查它是否吸引人。 引人入胜的数字:当一个数字(应包含3位或更多)乘以2和3,并且当这两个乘积与原始数字串联时,则会导致1到9之间的所有数字恰好出现一次 例1: 输入: N=192 输出:迷人 说明:与2相乘后 和3,并与原始 号码,号码会变成192384576 它包含从1到9的所有数字 例2: 输入: N=853 输出:不引人入胜 说明:这不是一个有趣的故事 号码 您的任务:Java 检查给定的编号是否正在生成,java,Java,我正在做一个关于Geeksforgek的问题,我提出了一个问题 给定一个数字,你的任务是检查它是否吸引人。 引人入胜的数字:当一个数字(应包含3位或更多)乘以2和3,并且当这两个乘积与原始数字串联时,则会导致1到9之间的所有数字恰好出现一次 例1: 输入: N=192 输出:迷人 说明:与2相乘后 和3,并与原始 号码,号码会变成192384576 它包含从1到9的所有数字 例2: 输入: N=853 输出:不引人入胜 说明:这不是一个有趣的故事 号码 您的任务: 您不需要读取输入或打印任何内容
您不需要读取输入或打印任何内容。您的任务是完成函数magnetic(),该函数接受整数n个参数并返回表示答案的布尔值 预期时间复杂度:O(1) 预期辅助空间:O(1) 限制条件: 100
引人入胜
返回布尔值,对问题为“引人入胜吗?”
在这里,您只需将A初始化为一个零数组,实际上(但从技术上讲)是“空的”
这里,您在0处初始化i
和标志
,并声明ch
for (i = 0; i < q.length(); i++) {
ch = q.charAt(i);
A[ch - 48]++;
}
因此,ch-48
将在A
中给出表示ch
的索引。例如,当ch
为1时,ch
的ASCII值为49
且49-48=1
。因此,它转到A[1]
并递增
请记住,数组转到[0,1,2,3等]
因此它转到[0,0,0等]
并将一个添加到第二个0--A[1]
,从而使A=[0,1,0等]
它继续通过q
中的每个数字,从而填充数组A
for (i = 1; i < 10; i++) {
// checking if every digit from '1' to '9' are present exactly once
// or not
if (A[i] != 1) {
flag = 1; // flag is set to 1 if frequency is not 1
break;
}
}
最后的if-else
语句检查flag
是否等于1
。请记住,只有当数组中没有统一填充1时,我们才将其设置为1,这意味着字符串q
不包含每个数字0-9中的一个
如果
标志
为1,返回false
,表示它不引人入胜。否则,它是迷人的。因此,当引人入胜时,返回true
“您的任务是完成函数引人入胜(),它接受整数n个参数”,这将是一个引人入胜(int n)
方法,但是您的方法是引人入胜(String q)
,那么这应该是一个什么解决方案呢?您能解释一下吗,你到底不明白什么?@ColeHenrich不,这不是Geeksforgeks写的。当然,有一个到GFG的链接会很好,所以这里是:。现在我们可以看到,GFG实际上编写了boolean ismagnetic(int-num)
@ColeHenrich。您似乎需要重新了解Unicode/ASCII字符的工作方式。作为一个字符,数字'0'
是数字ASCII值48,因此减法48是正确的,尽管它最好写为ch-'0'
,记录48是数字0的事实。--仅供参考:Integer.parseInt(q.charAt(i))
甚至不编译,所以你肯定错了。@Andreas有趣!这改变了很多以上的评论!
class Solution {
boolean fascinating(String q) {
int A[] = {0, 0, 0, 0, 0, 0,
0, 0, 0, 0}; // to store count of every digit from '0' to '9'
int i, flag = 0;
char ch;
for (i = 0; i < q.length(); i++) {
ch = q.charAt(i);
A[ch - 48]++;
}
0 = 48
1 = 49
2 = 50
3 = 51
and the rest.
for (i = 1; i < 10; i++) {
// checking if every digit from '1' to '9' are present exactly once
// or not
if (A[i] != 1) {
flag = 1; // flag is set to 1 if frequency is not 1
break;
}
}
if (flag == 1)
return false;
else
return true;
}
}