我编写了一个函数,它获取给定的数字并将其添加到其相反的数字,直到该数字是回文。我正在尝试计算代码的时间复杂度,但我根本不知道如何去做,甚至不知道如何开始。有人可以告诉我该怎么做吗?另外,这是最有效的方法还是将整数转换为字符串更好?
void getPali(int num) {
int n = 0;
int nNum;
while(true) {
nNum = num;
int rNum = 0;
while (nNum > 0) {
int rem = nNum % 10;
nNum = nNum / 10;
rNum = rNum * 10 + rem;
}
if(rNum == num) break;
num += rNum;
n++;
}
}
最佳答案
是否存在是数学上的未解题Lychrel numbers以 10 为基数。Lychrel 数是指重复将数字反转并与其自身相加的过程无法产生回文的数字。
由于您的代码实现了此过程,因此无法说明代码的时间复杂度是多少。
当然,这假设“int”是无界的,并且不会像在真实的 java 程序中那样进行环绕,但时间复杂度对于有界域来说是毫无意义的。
推测起点196不会终止。
关于java - 如何计算该算法的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121087/