Java 生成给定数字系统中的所有回文数?
我需要在给定的范围内,为给定的基数(应该能够达到10000)生成所有回文数。我需要一个有效的方法来做这件事 我无意中发现了,它与10号基数直接相关。我正在尝试将其调整为适用于“所有”基础:Java 生成给定数字系统中的所有回文数?,java,algorithm,Java,Algorithm,我需要在给定的范围内,为给定的基数(应该能够达到10000)生成所有回文数。我需要一个有效的方法来做这件事 我无意中发现了,它与10号基数直接相关。我正在尝试将其调整为适用于“所有”基础: public static Set allPalindromic(长限制、int-base、char[]列表){ Set result=new HashSet(); 对于(long i=0;i我没有足够的声誉来评论,但如果您只缺少偶数长度的回文,那么很可能您的列表有问题。很可能您忘记在列表中添加一个空条目以生
public static Set allPalindromic(长限制、int-base、char[]列表){
Set result=new HashSet();
对于(long i=0;i我没有足够的声誉来评论,但如果您只缺少偶数长度的回文,那么很可能您的列表有问题。很可能您忘记在列表中添加一个空条目以生成1001,它应该类似于num(10)+empty(“”+rev(01).对于所有可能的基数中的数字,没有那么多合适的字符(比如十六进制的0xDEADBEEF
,我想convert
有一些限制,比如36),所以忘掉外来数字,对于10000基数中的数字,使用简单的列表或数组,比如[88881235583]
然后将限额转换为需求基数,并将其存储。
现在生成奇偶长度的对称数组,如
[175,2175]
或[13,221,221,13]
。如果长度与限制长度相同,请比较数组值并拒绝过高的数字
您也可以使用限制数组作为起始,只生成值较小的回文。Integer.parseInt
具有带base
参数的重载,可以将任意基数的字符串转换为整数。Integer.toString
也可以,您不必通过yourself@niceman=36:我不能转换为ba如果我使用它,ses超过36。如果值小于最小基数或大于最大基数,则使用值10。hmmm同意…是这样的,我现在明白了。但是char[]不能有空字符。我将char[]替换为String[]以包括“”,但我现在需要修复我的convertBack和convert方法。@Vepir如果您不想做太多更改,那么您只需显式处理这种情况。只需在循环使用listUnicode(utf16)之前执行str+revStr即可char最多可以保存65535的值。但我不确定带有此类char的输出是否可读。我的建议是避免使用转换(文本输出除外)
public static Set<String> allPalindromic(long limit, int base, char[] list) {
Set<String> result = new HashSet<String>();
for (long i = 0; i <= base-1 && i <= limit; i++) {
result.add(convert(i, base, list));
}
boolean cont = true;
for (long i = 1; cont; i++) {
StringBuffer rev = new StringBuffer("" + convert(i, base, list)).reverse();
cont = false;
for (char d : list) {
String n = "" + convert(i, base, list) + d + rev;
if (convertBack(n, base, list) <= limit) {
cont = true;
result.add(n);
}
}
}
return result;
}