以下代码块:
Scanner in=new Scanner(System.in);
int n=in.nextInt();
//converting the integer to string and calculating
//its length reduces the complexity
//to O(n) as compared to O(n^2)
String str=Integer.toString(n);
int length=str.length();length-=1;
我找到了this code here。
我的问题是如何将int更改为字符串会降低时间复杂度?
答案 0 :(得分:4)
该代码的作者声称与其他解决方案相比,它降低了复杂性:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num,d,rev=0;
cin>>num;
// reverse a no.
while(num!=0)
{
d=num%10;
rev=rev*10+d;
num=num/10;
}
// using digits of reversed no.
while(rev!=0)
{
d=rev%10;
cout<<d*d; // printing square
rev=rev/10;
}
return 0;
}
这是错误的,两种解决方案都具有相同的复杂性O(n)
。
答案 1 :(得分:0)
即使使用简单的while
循环查找整数的长度,也是O(n),而不是O(n ^ 2)。
请考虑以下代码段:
while(n!=0)
{
n/=10;
++count;
}