作者SocketAM2 (AM2)
看板Programming
标题Re: [讨论] 排列组合的演算法解题
时间Tue Sep 1 10:50:07 2020
基本想法是一个个位数iterate过去
有个简单的剪枝手段:不可能达成4个的时候就不用往下数了
例如10000xx,最多就3个数
再来是个简单的算小计手段:已经数到四个数了,剩下的位数只能在已知最大值之内
例如1234xyz中的xyz各能在(0,1,2,3,4)中任选,所以这类共5^3=125个
我试了下python,光用上面这两招没特别雕语法
大概可以跑在一秒多
原po可以参考看看
还有版友想得到其他有效手段吗?
刚刚又发现一个不错的手段:建表查表
例如前面算过1234xyz这类共125个
建个表,key是“ 前四位数最大为4,且已经数到4个数了”,值是125
以後再碰到这种case就直接小计125
遇到表上没有的就往下拆分算完再加进表内
加上这招可以压到0.03秒左右
※ 引述《applebeing (苹果人)》之铭言:
: 求职时线上测验的问题,有算出解答,但觉得应该有更好的解法,
: 向各位版友请教解题想法。
: 问题如下:
: 一个七位数的数字,从第七位到个位数的顺序开始比对。
: 若当前位数的值,不小於曾出现过的数的最大值,就记录起来。
: 请问纪录结果为四个数字的可能组合数有几组?
: 例:
: 2334849 - 由左至右
: 第一位数 2 加入纪录
: 第二位数 3 大於等於2,加入纪录
: 第三位数 3 大於等於3,加入纪录
: 第四位数 4 大於等於3,加入纪录
: 第五位数 8 大於等於4,加入纪录
: 第六位数 4 不纪录
: 第七位数 9 大於等於8,加入纪录
: 纪录结果为 6
: 6429748 - 纪录 69 (2个数)
: 4629889 - 纪录 4699(4个数)
: 各位数可以为 0,例如 0001234、0007899 也符合要求。
: 我用回圈跑 1~一千万涵盖七位数,每个数字都检查纪录结果,得出组数。
: 跑了五分多钟,很笨也很没有效率。
: 想请问是否有更效率的解题方式?
: 请大家指教,感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.189.166 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1598928609.A.178.html
※ 编辑: SocketAM2 (140.109.189.166 台湾), 09/01/2020 10:53:29
※ 编辑: SocketAM2 (140.109.189.166 台湾), 09/01/2020 10:55:03
※ 编辑: SocketAM2 (140.109.189.166 台湾), 09/01/2020 10:57:40
※ 编辑: SocketAM2 (140.109.189.166 台湾), 09/01/2020 11:18:55
1F:推 applebeing: 感谢想法分享,很易懂且效率很好耶。 27.121.223.216 09/01 18:56