網站首頁 編程語言 正文
1. 引言
事情的由來是這樣的,今天遇到一個非常有意思的題目,如下:
1–11–21–1211–111221–312211
觀察上述數字,找出其中的規律,并嘗試思考給出下一個數字?
哇偶,可以先仔細思考一下下。。。
2. 外觀數列
外觀數列是一個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。
前五項如下:
1. ? ? 1 2. ? ? 11 3. ? ? 21 4. ? ? 1211 5. ? ? 111221 1 被讀作 ?"one 1" ?("一個一") , 即 11。 11 被讀作 "two 1s" ("兩個一"), 即 21。 21 被讀作 "one 2", ?"one 1" ("一個二" , ?"一個一") , 即 1211。 依次類推。。>>>[key for key, group in groupby('AAAABBBCCDAABBB')] [A, B, C, D, A, B]
找出規律后,我們可以很方便的知道第6項的數字為 312211, 第7項為 13112221。所以,我們可以編寫一個函數,來自動幫我們生成這個數列的某一項。
3. 代碼思路
經過思考,我們你可以總結出核心問題的求解在于我們需要統計出一組數字在序列中出現的次數。
3.1 提取輸出的key
因為外觀數列中每個子項都是統計數字key
出現的次數,所以我們可以利用groupby
函數來獲取子項中需要描述的key值,
樣例如下:
>>>[key for key, group in groupby('AAAABBBCCDAABBB')] [A, B, C, D, A, B]
3.2 提取每個key對應的value
正如上述輸出所展示的,我們使用groupby
函數將同一key進行分組。因此,我們可以對每個key
對應的value
進行類型轉換,
如下:
>>>[list(group) for key, group in groupby('AAAABBBCCDAABBB')] [['A', 'A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C'], ['D'], ['A', 'A'], ['B', 'B', 'B']]
3.3 統計每個group對應的長度
經過上述轉換,我們按照key值對數列中的子項進行了分組,進而我們可以獲取每個group的長度,代碼如下:
>>>[len(list(group)) for key, group in groupby('AAAABBBCCDAABBB')] [4, 3, 2, 1, 2, 3]
3.4 整合輸出
通過上述一步步的分析,我們已經很方便地使用groupby來實現我們需要的輸出了,我們只需要整合每個group分組后的長度以及其key即可,
代碼如下:
>>>[(len(list(group)),key) for key, group in groupby('AAAABBBCCDAABBB')] [(4, 'A'), (3, 'B'), (2, 'C'), (1, 'D'), (2, 'A'), (3, 'B')]
3.5 解決方案
正如以上的分析,我們知道元組包含每個值的計數和值本身。我們可以使用上面的邏輯,用Python來實現外觀數列的求解!
代碼如下:
我們這里打印該數列的前15項,即讓參數iterator = 15
,此時的輸出如下:
4. 總結
本文通過一道非常有趣的題目引入了外觀數列的定義,然后通過舉例分析找出用Python實現該功能的快捷方式,最后給出了整個問題求解的樣例代碼。
原文鏈接:https://blog.csdn.net/sgzqc/article/details/123670973
相關推薦
- 2023-05-20 Android內存泄漏導致原因深入探究_Android
- 2022-06-25 iOS自定義滑桿效果_IOS
- 2022-08-05 EasyExcel 3.X 簡單寫入Excel文件數據
- 2022-09-26 利用QDir實現刪除選定文件目錄下的空文件夾_C 語言
- 2022-01-30 VSCode標簽內的代碼塊無法折疊問題解決
- 2022-07-29 如何通過redis減庫存的秒殺場景實現_Redis
- 2022-08-16 hive數據倉庫新增字段方法_數據庫其它
- 2023-06-19 CentOS7使用yum安裝Golang的超詳細步驟_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支