//动态规划是回文串的万金油解法。
//可以求出所有回文串的数量,可以求最长回文串等等,
//因为dp[i][j]保存了每一种字符串是不是回文串
public static boolean isPalindrome(int num) {
char[] arr = String.valueOf(num).toCharArray();
int n = arr.length;
//用dp做
//dp[i][j]代表arr[i]到arr[j]是否是回文串
boolean[][] dp = new boolean[n][n];
//1.初始化
//先初始化每一个字符
for (int i = 0; i < n; i++) {
dp[i][i] = true;
}
//再判断相邻的字符
for (int i = 0; i < n - 1; i++) {
dp[i][i + 1] = arr[i] == arr[i + 1];
}
//状态转移
//dp[i][j]依赖于dp[i+1][j-1]
for (int i = n-1; i >= 0; i--) {
//相邻的已经判断过了,需要从j=i+2开始判断
for (int j = i + 2; j < n; j++) {
dp[i][j] = dp[i + 1][j - 1] && arr[i] == arr[j];
}
}
return dp[0][n - 1];
}