如果数字n包含特定数字k,最有效的方法是什么?

时间:2013-10-04 15:17:21

标签: c++ algorithm time-complexity

假设我的约束是
1·; = N&LT = 10 ^ 9 0 <= k <= 9

在最短时间内搜索此内容的最佳算法是什么?

我尝试了两种方法: 我的第一种方法 n是数字,k是4或7

while(n>0)
 {
         d=n%10;
         if(d==4 || d==7)
         return true;
         n/=10;
 }

我的第二种方法是将数字转换为字符串并使用find函数:

string str = NumberToString(i);
if ((str.find("4") != std::string::npos) || (str.find("7") != std::string::npos))
 c++;  

还有另一种更快的方法来实现这一目标吗? 我需要的是这个数字应该包含4或7

1 个答案:

答案 0 :(得分:1)

如果找到一个特定数字出现在一个数字中的次数是你的意思,那么复杂性将是 O(n),其中 n 是字符串的长度(数字):

char x = '7';
std::string number("9876541231654810654984431");
int count = 0;
for (size_t i = 0; i < number.size(); ++i)
    if (number[i] == x) count++;