查找数字 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
表示为十进制字符串?您已经拥有n
和k
是什么形式的?
不管怎样,std::find
和 std::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 的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章