Сложность: hard
Если задан целочисленный массив nums, переместите все четные числа в начало массива, а затем все нечетные. Верните любой массив, удовлетворяющий этому условию.
Пример:
Input: left = "4", right = "1000"
Output: 4
👨💻 Алгоритм:
1⃣Найти все палиндромы до корня из right.
2⃣Проверить, являются ли квадраты этих палиндромов палиндромами и лежат ли в диапазоне [left, right].
3⃣Подсчитать количество таких суперпалиндромов.
😎 Решение:
class Solution {
private boolean isPalindrome(long x) {
String s = Long.toString(x);
return s.equals(new StringBuilder(s).reverse().toString());
}
public int superpalindromesInRange(String left, String right) {
long leftNum = Long.parseLong(left);
long rightNum = Long.parseLong(right);
int count = 0;
for (int i = 1; i < 100000; i++) {
String s = Integer.toString(i);
long palin1 = Long.parseLong(s + new StringBuilder(s).reverse().toString());
long palin2 = Long.parseLong(s + new StringBuilder(s.substring(0, s.length() - 1)).reverse().toString());
if (palin1 * palin1 > rightNum) {
break;
}
if (palin1 * palin1 >= leftNum && isPalindrome(palin1 * palin1)) {
count++;
}
if (palin2 * palin2 >= leftNum && palin2 * palin2 <= rightNum && isPalindrome(palin2 * palin2)) {
count++;
}
}
return count;
}
}Ставь 👍 и забирай 📚 Базу знаний