/**
* 这道题需要注意的地方:
* 1. 需要求解每位,要掌握取模的操作。
* 2. 有两个嵌套的循环,而且循环的逻辑稍微有点复杂,不是简单的两个for就好了。我也是修改了好多次。
* 3. 在循环中需要保持一个不变量,在这里就是num,在所有需要修改它的地方,都用拷贝出来的版本。
* BTW 这是Lintcode 青铜版的题目,要求在15分钟内做出来。
* 看来我连青铜都没到。这道题我做了1个多小时。
* 失败乃成功之母,共勉。
*/
public class getNarcissisticNumbers {
public static List<Integer> getNarcissisticNumbers(int n) {
int limit_latter = (int)Math.pow(10, n);
int limit_former = (int)Math.pow(10, n - 1);
int[] digit = new int[n];
int count;
int dup1 , dup2;
List<Integer> result = new ArrayList<>();
int num = limit_former;
for (; num < limit_latter; num++) {
dup1 = num;
dup2 = num;
count = 1;
// 求各个位,并保存在digit[]中
while(count<n+1) {
digit[count-1] = dup1 % 10;
dup1 /= 10;
count++;
}
for (int m = 0; m < n; m++) {
dup2 -= Math.pow(digit[m], n);
}
if (dup2 == 0) {
result.add(num);
}
}
return result;
}
网友评论