【问题标题】:What would be the most efficient way to find if a number n contains a specific number k?查找数字 n 是否包含特定数字 k 的最有效方法是什么?
【发布时间】:2013-10-04 15:17:21
【问题描述】:

假设我的限制是
1

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

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

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

我的第二种方法是将数字转换为字符串并使用查找功能:

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

还有其他更快的方法来实现这一点吗? 我只需要数字应该包含 4 或 7

【问题讨论】:

  • 这对我来说似乎是一个家庭作业问题,如果你展示你迄今为止尝试过的东西,你更有可能从这样的问题中得到积极的回应。
  • 包含是什么意思?其中一位数字是k?
  • 当您说“包含”时,您的意思是“有 k 作为其数字之一”吗?
  • 一个数字“包含”另一个数字是什么意思?你的意思是n 表示为十进制字符串包含一个子字符串k 表示为十进制字符串?您已经拥有nk 是什么形式的?
  • 不管怎样,std::findstd::string::find 可能是你想看的。

标签: c++ algorithm time-complexity


【解决方案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++;

【讨论】:

  • 如果你是真的挑剔,应该是std::string::size_type i
  • @BoBTFish:应该吗?您能否指出选择size_t 而不是std::string::size_type 可能会导致任何问题的情况?
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多