代码拉取完成,页面将自动刷新
思路:
1. 首先此题的跑时降到 n^(1/4)
2. 因为superpalindrom 的 跟值 n^(1/2) 是palindrom, 所以我们只需要其前半部分即可(能推出后半部分) => n^(1/4)
代码:
class Solution {
public int superpalindromesInRange(String L, String R) {
int res=0;
long l=Long.parseLong(L);
long r=Long.parseLong(R);
long s=(long)(Math.sqrt(l))-10;
long e=(long)(Math.sqrt(r))+10;
for(long i=1;i<=e;i++){
String cur=i+"";
String pair[]=getP(cur);
long small=Long.parseLong(pair[0]);
small=small*small;
long big=Long.parseLong(pair[1]);
big=big*big;
if(small>r)break;
if(small<=r&&small>=l&&isP(small+"")){
res++;
}
if(big<=r&&big>=l&&isP(big+"")){
res++;
}
}
return res;
}
public String[] getP(String s){
String res[]=new String[2];
StringBuilder rev=new StringBuilder(s);
res[1]=s+rev.reverse().toString();
rev=new StringBuilder(s.substring(0,s.length()-1));
res[0]=s+rev.reverse().toString();
return res;
}
public boolean isP(String s){
int l=0,r=s.length()-1;
while(l<r){
if(s.charAt(l)!=s.charAt(r))return false;
l++;r--;
}
return true;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。