Java 检查给定的编号是否正在生成

Java 检查给定的编号是否正在生成,java,Java,我正在做一个关于Geeksforgek的问题,我提出了一个问题 给定一个数字,你的任务是检查它是否吸引人。 引人入胜的数字:当一个数字(应包含3位或更多)乘以2和3,并且当这两个乘积与原始数字串联时,则会导致1到9之间的所有数字恰好出现一次 例1: 输入: N=192 输出:迷人 说明:与2相乘后 和3,并与原始 号码,号码会变成192384576 它包含从1到9的所有数字 例2: 输入: N=853 输出:不引人入胜 说明:这不是一个有趣的故事 号码 您的任务: 您不需要读取输入或打印任何内容

我正在做一个关于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;
}
}