【发布时间】:2020-10-25 06:03:44
【问题描述】:
我正在尝试解决 LeetCode 丑数挑战 II。我想出了自己的算法,似乎在理论上可行,但实际上并没有。我想知道为什么。我用 Java 实现了这个,但我通常用 Python 编写,所以如果您更正 Java 代码,将不胜感激。
问题陈述是:
“写一个程序来找到第n个丑数。
丑数是质因数只包含2的正数, 3、5。
例子:
输入:n = 10 输出:12 解释:1、2、3、4、5、6、8、9、10、12 是前 10 个丑数的序列。注意:
1 通常被视为丑陋的数字。 n 不超过 1690。”
这是我的代码:
class Solution {
public int nthUglyNumber(int n) {
// Gather all the uglies in one place
int[] uglies = new int[n];
// Set first one as one
uglies[0] = 1;
// Start filling
for (int i = 1; i < uglies.length - 1; i++) {
int num = i;
if (isUgly(num) == true) {
uglies[i] = num;
} else {
while (isUgly(num) == false) {
num++;
}
uglies[i] = num;
System.out.println(uglies[i]);
}
}
return uglies[uglies.length - 1];
}
public boolean isUgly(int m) {
boolean ans = false;
// Check if the number is divisible by an integer other than 2,3 or 5
// Simply iterate through numbers smaller than n to find a smaller divisor
for (int i = 2; i < m; i++) {
// If n is divisable by i and i is not a multiple of 2,3 or 5
boolean other_divisor = (m % i == 0) && (i % 2 != 0 || i % 3 != 0 || i % 5 != 0);
if (other_divisor == true) {
ans = false;
} else {
ans = true;
}
}
return ans;
}
}
所以我基本上做了一个函数 isUgly(n),它接受一个数字并通过找出它是否有除数 2、3、5 以外的除数来检查它是否丑陋。如果有,那么它不应该是一个丑陋的数字。比在主体中我检查所有整数并检查它们是否丑陋。如果是,我将它们添加到一个数组中,直到我填写第 n 个位置。如果纠正将不胜感激。
【问题讨论】:
-
这能回答你的问题吗? nth ugly numberThis question 也引起了一种似曾相识:)
-
您的 if 语句中不需要
== false或== true。您的isUgly()方法已经返回一个布尔值。 -
啊,是的,谢谢。但是算法本身呢?为什么这不起作用?
标签: java arrays number-theory