Narcissistic Number is a number that is the sum of its own digits each raised to the power of the number of digits.See wiki
For example the 3-digit decimal number153is a narcissistic number because 153 = 1^3+ 5^3+ 3^3.
And the 4-digit decimal number1634is a narcissistic number because 1634 = 1^4+ 6^4+ 3^4+ 4^4.
Givenn, return all narcissistic numbers with n digits.
Example
Given1, return[0,1,2,3,4,5,6,7,8,9].
Given2, return[].
Notice
You may assume n is smaller than 8.
Analysis
Might be better to implement custom power function, since Math.pow() is returning double type.
Solution
publicclassSolution { /** * @param n: The number of digits * @return: All narcissistic numbers with n digits */publicList<Integer> getNarcissisticNumbers(int n) {List<Integer> ans =newArrayList();if (n ==0) return ans;int upperLimit =1;int lowerLimit =1;for (int i =0; i < n; i++) { upperLimit *=10; }if (n ==1) { lowerLimit =0; } else { lowerLimit =1;for (int i =0; i < n -1; i++) { lowerLimit *=10; } }double sum =0.0;for (int i = lowerLimit; i < upperLimit; i++) {int k = i; sum =0.0; while (k >0) { sum = sum +Math.pow(k %10, n); k = k /10; }if (sum == (double) i) {ans.add(i); } }return ans; }}
Jiuzhang's Solution (Using custom pow() function)
classSolution {/* * @param n: The number of digits. * @return: All narcissistic numbers with n digits. */publicArrayList<Integer> getNarcissisticNumbers(int n) {// write your code hereArrayList<Integer> result =newArrayList<Integer>();if (n ==1) {for (int i =0; i <10; ++i)result.add(i);return result; }if (n ==6) {result.add(548834);return result; }for (int i =pow(10, n-1); i <pow(10, n); ++i) {int j = i;int s =0;while (j >0) { s +=pow((j %10), n); j = j /10; }if (s == i)result.add(i); }return result; }publicintpow(int a,int b) {int val =1;for (int i =1; i <=b; ++i) val *=a;return val; }}