查找数字 n 是不是包含特定数字 k 的最有效方法是啥?

Posted

技术标签:

【中文标题】查找数字 n 是不是包含特定数字 k 的最有效方法是啥?【英文标题】: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 可能是你想看的。 【参考方案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 可能会导致任何问题的情况?

以上是关于查找数字 n 是不是包含特定数字 k 的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

K-进制数

查找数组中是不是至少有一次从 1 到 K 的所有数字

最大化数字的乘积

检查逗号分隔列表是不是包含特定数字[重复]

找出排序数组中重复数字的个数

在向量中查找连续数字的更有效方法?