1
31
如果您是指数字的字符(如1927和9721),那么至少有两种方法。
如果允许您进行排序,一种方法是
然而,鉴于你的愿望 不 对数字排序,另一种选择是设置一个十元素数组,所有元素最初都设置为零,然后处理第一个数字中的每个数字,使相关元素递增。 然后对第二个数字执行相同的操作,但要递减。 如果在最后,它仍然是0,那么这些数字是相互排列的。
这是有效的,因为它是
在C语言中,下面的完整程序说明了如何实现这一点:
只需传递两个(正数),并假设它们符合
|
2
17
如果每个数字的数目相同,A和B是变位词。所以基本上最快的方法是,计算a和b的数字:
|
3
3
是作业吗? 计算每个数字的出现次数并进行比较,如果它们相同,则可以使用排列将一个数字转换为另一个数字。 |
4
1
创建数组:
在
如果两个数组相等,则数字是排列。 这是一个O(N)算法,所以渐进地说,这是它将得到的最有效的算法(如果不检查所有数字至少一次,就无法解决这个问题)。 如果数字的长度不同,您可以立即返回false,因此假定两者的长度都为n。填充数组需要2n个操作,然后正好进行10个比较来读取数组。2N+10为O(N)。 |
5
1
我发现这个相当有效的解决方案 rossetacode.org . 我希望你能原谅我用Java编写它(我不喜欢C),但是语法应该或多或少相同。 代码首先检查数字是否具有相同的位数,然后将这些数字按位相加,再将它们转换为一个总数。除了移位距离乘以系数6。这使得较小的数字无法组成与较大数字相同的值。例如,一个“9”需要64次“8”才能与其值匹配,这显然是不可能的。 此代码假定非负输入。
|
6
0
好吧,如果你能构建一个80GB的表,你总是可以做到:
|
7
0
如果我从你的问题中正确地理解了,排列是元素的组合,不会重复。所以如果123是312的有效排列,那么它也是
等等。 基于这个假设,假设你得到了两个整数123456789和129837456。(为了简单起见,我还假设两个数字的长度相等)。如果您理解了这一点,那么您可能也能够检查不同的排列和组合。 为此,您需要做的就是从给定的数字中得到单位的整数,例如:
或
我从字面上给了你算法提示,如何做到这一点,所以这很容易做到。完成后,您将以单独的整数结束(最好将这些值保存在数组中)
现在 对另一个给定的整数执行相同的操作,这样您将得到另一个整数数组
所以现在您需要检查的是,如果第二个数组的所有整数都存在于第一个整数数组中,如果是,那么它们是第一个数组或第一个数的整数的排列。 我希望这有帮助。 |
8
-1
编辑以添加附加测试) 假设你在数字域里,怎么样
|
9
-1
不知道为什么你不想排序,除非这是你作业的一个条件。对于任何在这个问题上犹豫不决的人 最快的(也是最多的蟒蛇!)测试python中是否有两个整数是排列的方法 :
这个解决方案在python中运行得稍快,当然依赖于被测试为相对较小整数的数字。对于项目Euler问题52来说,它工作得相当好。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |