将int转换为字符串可减少计算其长度的时间复杂度

时间:2017-06-02 06:22:36

标签: java algorithm time-complexity

以下代码块:

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更改为字符串会降低时间复杂度?

2 个答案:

答案 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;
}