我试图在spoj https://www.spoj.com/problems/PALIN上提交这段代码,它要求查找给定数字n的下一个最小回文,但是由于这段代码的工作速度很慢,它超过了时间限制(2-9秒)。还有其他方法可以更快地解决这个问题吗?
第一行包含整数t,测试用例数。在下面的t行中给出整数K。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
long long int t,k; string k2,k1;
cin>>t;
while(t--){
cin>>k;k++;
do{
k1=to_string(k);
k2=k1;
reverse(k1.begin(), k1.end());
if(k1==k2){cout<<k<<endl;}
k++;
}while(k1!=k2);
}
return 0;
}
示例输入:
2
808
2133
示例输出:
818
2222
发布于 2021-03-07 23:29:08
最明显的事情是停止复制和反转字符串。相反,将第一个字符与最后一个字符进行比较,然后再将第二个字符与第二个字符进行比较,依此类推。
另外,你为什么要使用字符串呢?字符串既复杂又昂贵。您正在执行的操作完全可以在数字上完成。
最后,考虑像"473X“这样的数字。所有这些都不可能是回文。你不需要测试所有的十个。如果你要看以"47“开头的四位数字,只有一个是回文--那你为什么要检查所有的100个数字呢?
在编写代码来解决这样的问题之前,请仔细考虑将要使用的算法,并确保没有任何明显的浪费精力。
https://stackoverflow.com/questions/66525751
复制相似问题