Java 如何计算该算法的时间复杂度

Java 如何计算该算法的时间复杂度,java,algorithm,time-complexity,Java,Algorithm,Time Complexity,我编写了一个函数,它获取一个给定的数字,并将其添加到其反面,直到该数字成为回文。我试图计算代码的时间复杂度,但我根本不知道如何做,甚至不知道如何开始。有人能告诉我怎么做吗?另外,这是最有效的方法还是将整数转换为字符串更好 void getPali(int num) { int n = 0; int nNum; while(true) { nNum = num; int rNum = 0;

我编写了一个函数,它获取一个给定的数字,并将其添加到其反面,直到该数字成为回文。我试图计算代码的时间复杂度,但我根本不知道如何做,甚至不知道如何开始。有人能告诉我怎么做吗?另外,这是最有效的方法还是将整数转换为字符串更好

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++;
    }
}

作为输入值num的函数。此代码块:

while (nNum > 0) {
    int rem = nNum % 10;                
    nNum = nNum / 10;                 
    rNum = rNum * 10 + rem;                
}
必须执行日志(n)次。这是因为每次通过该环路都会将nNum减少10倍。所以对于一个2^10的数字,需要10次循环迭代才能完成。此外,由于nNum在每个循环开始时被重置为n,因此该循环每次运行所需的时间相同

然后循环的下一部分是

if(rNum == num) break;
num += rNum;              
n++;
这本质上是循环条件,但它是以一种奇怪的方式编写的。更大的循环将一直执行到rNum=num。所以问题是rNum增加的速度有多快。答案是rNum每次通过大循环时都会增加10倍,因此要达到num,它将再次需要lg(n)时间


因此,组合的时间复杂度为log(n)^2。因为外部循环执行log(n)次,而内部循环执行log(n)次。因此,时间复杂度为log(n)^2(或log^2(n))

基数10中是否存在时间复杂度是数学中尚未解决的问题。Lychrel数是重复的反转过程和向自身添加数字的过程无法生成回文的数

因为您的代码实现了这个过程,所以无法确定代码的时间复杂度

当然,这假设“int”是无界的,并且不像在真正的java程序中那样环绕,但是时间复杂性对于有界域来说是没有意义的


起点196被推测为不终止。

我认为关于外循环执行多少次的争论是基于对代码的误读。这个答案已被接受,但它是错误的。哎呀,我犯了一个错误。我的分析假设该算法将以等于rNum的方式递增num。看来情况并非如此。很明显,这个过程总是终止的吗?对我来说不是。