蓝桥杯 算法提高 阮小二买彩票 Python
算法提高 阮小二買彩票
時間限制:1.0s 內存限制:512.0MB
問題描述
在同學們的幫助下,阮小二是變的越來越懶了, 連算賬都不愿意自己親自動手了,每天的工作就是坐在電腦前看自己的銀行賬戶的錢是否有變多。可是一段時間觀察下來,阮小二發現自己賬戶的錢增長好慢啊,碰 到節假日的時候連個銅板都沒進,更郁悶的是這些天分文不進就算了,可恨的是銀行這幾天還有可能“落井下石”(代扣個人所得稅),看著自己賬戶的錢被負增長 了,阮小二就有被割肉的感覺(太痛苦了!),這時阮小二最大的愿望無疑是以最快的速度日進斗金,可什么方法能夠日進斗金呢?搶銀行(老本行)?不行,太危 險,怕有命搶沒命花;維持現狀?受不了,摟錢太慢了!想來想去,抓破腦袋之后,終于想到了能快速發家致富的法寶----買彩票,不但掙了錢有命花,運氣好 的話,可以每天中他個幾百萬的,豈不爽哉!抱著這種想法,阮小二開始了他的買彩票之旅。想法是“好的”(太天真了OR 太蠢了),可是又發現自己的數學功底太差,因為不知道數字都有哪些組合排列?那現在就請同學們寫個遞歸程序,幫助阮小二解決一下這個問題吧!
輸入格式
不超過6位數的正整數N,注意:構成正整數N的數字可重復
輸出格式
組成正整數N的所有位數的全排列,這些排列按升序輸出,每個排列占一行。
注意:輸出數據中不能有重復的排列
樣例輸入
123
樣例輸出
123 132 213 231 312 321
樣例輸入
3121
樣例輸出
1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211
樣例輸入
4003
樣例輸出
0034 0043 0304 0340 0403 0430 3004 3040 3400 4003 4030 4300
思路:
這道題題目中已經明確是遞歸了,采用回溯法求解
詳解博客:https://blog.csdn.net/qq_42212961/article/details/104400517
代碼:
class solution:rst = []solution =[]def solvePermutation(self, n):self.helper(n, [],[]) # 首次調用def helper(self,n, solution, rst):if len(n) == 0: # 發現排序對象列表已經選完,輸出當前的排序tmp = ''.join(solution)if tmp not in rst:rst.append(''.join(solution))print(''.join(solution))return # 返回上一步驟,你會發現返回到了上一個helper()的循環函數中,并且會循環下一個n[i],被加入到新的排序,新的n[i]會被去掉for i in range(len(n)):newSolution = solution + [n[i]] # 把n[i]加入新的排序輸出列表newArray = n[:i] + n[i+1:] # 創建新的“n”,在排下一位置前,把n[i]去除掉self.helper(newArray,newSolution,rst) # 尋找剩余的下一位置可能的數字if __name__ == '__main__':n = sorted(list(input())) # 排序一遍,以符合題目要求solution().solvePermutation(n)總結
以上是生活随笔為你收集整理的蓝桥杯 算法提高 阮小二买彩票 Python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POS机安全电路设计
- 下一篇: 「微信群合影2.3.0」- 新增高清头像