Strictly Palindromic Number

medium two pointers palindrome number base math

Problem

An integer n is strictly palindromic if, for every base b from 2 to n - 2 (inclusive), the representation of n in base b reads the same forward and backward. Given an integer n, return true if it is strictly palindromic and false otherwise.

Inputn = 9
Outputfalse
Base 2: 9 = 1001 (palindrome). Base 3: 9 = 100 (not a palindrome), so we return false.
Inputn = 4
Outputfalse
Only base 2 is checked: 4 = 100, which is not a palindrome.

def is_strictly_palindromic(n):
    for b in range(2, n - 1):
        digits = []
        m = n
        while m > 0:
            digits.append(m % b)
            m //= b
        i, j = 0, len(digits) - 1
        while i < j:
            if digits[i] != digits[j]:
                return False
            i += 1
            j -= 1
    return True
function isStrictlyPalindromic(n) {
  for (let b = 2; b <= n - 2; b++) {
    const digits = [];
    let m = n;
    while (m > 0) {
      digits.push(m % b);
      m = Math.floor(m / b);
    }
    let i = 0, j = digits.length - 1;
    while (i < j) {
      if (digits[i] !== digits[j]) return false;
      i++;
      j--;
    }
  }
  return true;
}
boolean isStrictlyPalindromic(int n) {
    for (int b = 2; b <= n - 2; b++) {
        List<Integer> digits = new ArrayList<>();
        int m = n;
        while (m > 0) {
            digits.add(m % b);
            m /= b;
        }
        int i = 0, j = digits.size() - 1;
        while (i < j) {
            if (!digits.get(i).equals(digits.get(j))) return false;
            i++;
            j--;
        }
    }
    return true;
}
bool isStrictlyPalindromic(int n) {
    for (int b = 2; b <= n - 2; b++) {
        vector<int> digits;
        int m = n;
        while (m > 0) {
            digits.push_back(m % b);
            m /= b;
        }
        int i = 0, j = (int)digits.size() - 1;
        while (i < j) {
            if (digits[i] != digits[j]) return false;
            i++;
            j--;
        }
    }
    return true;
}
Time: O(n log n) Space: O(log n)