当前位置:  开发笔记 > 开发工具 > 正文

检查num1的数字是否为num2中的数字而不检查每个数字的方法?

如何解决《检查num1的数字是否为num2中的数字而不检查每个数字的方法?》经验,为你挑选了2个好方法。

让我们说我已经猜到了一个乐透号码:

1689

并且彩票的工作方式是,只要数字与实际中奖彩票号码中的数字1:1匹配,数字的顺序就无关紧要了.

因此,1689号码将是一个中奖彩票号码:

1896年,1698年,9816年等.

只要您的猜测中的每个数字都出现在目标数字中,那么您就赢了彩票.

有没有数学方法可以做到这一点?

我用O(N ^ 2)循环解决了这个问题,检查每个数字与中奖彩票号码的每个数字(用模数分开).这很好,它有效,但我想知道我能做的任何简洁的数学技巧.

例如,起初...我认为我可能会很棘手,只需要取两个数字中每个数字的总和和乘积,如果它们相匹配,那么你就赢了.

你觉得那会有用吗?

然而,当我发现彩票猜测时,我很快就反驳了这一点:222和124有不同的数字,但产品和总和相同.

任何人都知道我可以使用任何数学技巧来快速确定num1中的数字是否与num2中的数字相匹配而不管顺序如何?



1> Daniel LeChe..:

如何浏览每个数字,并计算每个数字的出现次数(分成两个不同的10个元素数组)?完成总计后,比较每个数字的计数.因为你只看一次每个数字,那就是O(N).

代码看起来像:

for(int i=0; i

上面的代码假设guessDigits和actualDigits都是char字符串; 如果他们持有实际数字,那么你可以跳过- '0'业务.

可能有一些优化会使这个占用更少的空间或更快地终止,但它是一个非常简单的O(N)方法的例子.

顺便说一句,正如我在评论中提到的,乘法/和比率肯定不会因为零而起作用.考虑0123和0222.产品为0,两种情况下的总和为6.



2> Frakkle..:

拆分成数组,排序数组,连接成字符串,比较字符串.

(不是数学技巧,我知道)

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有