Skip to content

1134. Armstrong Number πŸ”’

Description

Given an integer n, return true if and only if it is an Armstrong number.

The k-digit number n is an Armstrong number if and only if the kth power of each digit sums to n.

 

Example 1:

Input: n = 153
Output: true
Explanation: 153 is a 3-digit number, and 153 = 13 + 53 + 33.

Example 2:

Input: n = 123
Output: false
Explanation: 123 is a 3-digit number, and 123 != 13 + 23 + 33 = 36.

 

Constraints:

  • 1 <= n <= 108

Solutions

Solution 1: Simulation

Thinking

An Armstrong number equals the sum of its digits each raised to \(k\), the number of digits. Read \(k\) from the decimal length, peel digits by modulo and integer division, and compare the power sum with \(n\). The digit count is tiny, so a direct loop suffices.

We can first calculate the number of digits \(k\), then calculate the sum \(s\) of the \(k\)th power of each digit, and finally check whether \(s\) equals \(n\).

The time complexity is \(O(\log n)\), and the space complexity is \(O(\log n)\). Here, \(n\) is the given number.

1
2
3
4
5
6
7
8
class Solution:
    def isArmstrong(self, n: int) -> bool:
        k = len(str(n))
        s, x = 0, n
        while x:
            s += (x % 10) ** k
            x //= 10
        return s == n
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
    public boolean isArmstrong(int n) {
        int k = (n + "").length();
        int s = 0;
        for (int x = n; x > 0; x /= 10) {
            s += Math.pow(x % 10, k);
        }
        return s == n;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
public:
    bool isArmstrong(int n) {
        int k = to_string(n).size();
        int s = 0;
        for (int x = n; x; x /= 10) {
            s += pow(x % 10, k);
        }
        return s == n;
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func isArmstrong(n int) bool {
    k := 0
    for x := n; x > 0; x /= 10 {
        k++
    }
    s := 0
    for x := n; x > 0; x /= 10 {
        s += int(math.Pow(float64(x%10), float64(k)))
    }
    return s == n
}
1
2
3
4
5
6
7
8
function isArmstrong(n: number): boolean {
    const k = String(n).length;
    let s = 0;
    for (let x = n; x; x = Math.floor(x / 10)) {
        s += Math.pow(x % 10, k);
    }
    return s == n;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
/**
 * @param {number} n
 * @return {boolean}
 */
var isArmstrong = function (n) {
    const k = String(n).length;
    let s = 0;
    for (let x = n; x; x = Math.floor(x / 10)) {
        s += Math.pow(x % 10, k);
    }
    return s == n;
};

Comments