一串数字重新组合新数字的算法
比如 123 这个数字
重新组合成
1
2
3
12
13
23
21
31
32
321
...
怎么实现呢,思路,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如 123 这个数字
重新组合成
1
2
3
12
13
23
21
31
32
321
...
怎么实现呢,思路,谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
本人使用语言 js, 观 上面数组的 规律, 新数字的 长度 是1-3(包含1 、3) , 数字 不存在123 中任何重复一项,既每一位 都只 取一次。
实现思路 :
1 、声明 一个 num数字 toString下变成字符串 str,获取 str它的长度(举例为3) ;
2 、随机一个1-3 (包含1 、3)数字作为 数组的长度(arrLength) 这个长度既 新数字的位数,
3 、再 从这个 str.substr( Math.random()3 ,1) ,截取一位数字,再将这个数字push 到一个数组中去,arrLength为几 就截取 几次就可以了, 在这里最好用一个循环, Math.random()3 这里的3 下次就会变成2 , 原字符串长度 会发生改变。
4、 截取完成后 得到的新数组arr , 用join(“”)合并一下,继续parserInt 就ok ,完成 了
想到一个,不知道是不是最优的。
利用js的随机数,随机生成3个1~3的数字组合起来,然后放到一个数组。
每次判断数组是否有重复,没有重复就加到数组中去,直至数组的长度等于333。
1.确定生成数据的长度n
2.再随机从给定数字中取出n个数字
3.最后随机将n个数字放入到长度为n的数组中的不同位置
4.数组转换为字符串
深度遍历,看不懂的私信我
举个例子,比如三位数的数字,
1.先找到所有1位数的组合,然后再进行排列
2.找出所有两位数的组合,再排列
3.找到三位数的组合,再排列
然后将三类结果综合起来,就是想要结果
看了下上面的解答,我给个c++的。
首先这个题目,一眼看过去什么都不用想,绝对递归!!!
mskf朋友的深搜,我看不懂php,所以不知道对不对,但用的都是递归。
我参照按照treeandgrass这位朋友的思路。
因为这种题,很有规律,所以一个函数就可以搞定。
建议LZ先看下这个版本的全排列,再看你这个题目,再看我的代码就懂了。http://blog.csdn.net/laojiu_/article/details/51115352
工具函数
实现
利用上面的工具函数
replace
把待处理字符串str
分为两部分头
和剩下的部分
然后递归的处理剩下的部分。
如图 "123" 的头和尾组合是
123
213
312
然后递归的处理尾 23 13 12 得到 (23, 32) 和 (13, 31) 和 (12, 21)
把 1 应用到 23, 32
把 2 应用到 13, 31
把 3 应用到 12, 21
就可以得到 "123" 的全遍历结果 123, 132, 213, 231, 312, 321 共 6 个
因为是递归的处理尾,长度为
n-1
的时候也可以得出 想要的结果。以下是我的实现
简单的测试用例
结果如图
果然受到了 Haskell 影响... 现在看列表和字符串都是
头 + 尾
的结构... 即x:xs