日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode(38): 报数

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode(38): 报数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Easy!

題目描述:

報數(shù)序列是指一個整數(shù)序列,按照其中的整數(shù)的順序進行報數(shù),得到下一個數(shù)。其前五項如下:

1. 1 2. 11 3. 21 4. 1211 5. 111221

1?被讀作??"one 1"??("一個一") , 即?11。
11?被讀作?"two 1s"?("兩個一"), 即?21。
21?被讀作?"one 2", ?"one 1"?("一個二"?,??"一個一")?, 即?1211。

給定一個正整數(shù)?n?,輸出報數(shù)序列的第?n?項。

注意:整數(shù)順序?qū)⒈硎緸橐粋€字符串。

示例?1:

輸入: 1 輸出: "1"

示例 2:

輸入: 4 輸出: "1211"

解題思路:

題目描述的不是很清楚,其實就是第i+1個字符串是第i個字符串的讀法,第一字符串為 “1”

比如第四個字符串是1211,它的讀法是 1個1、1個2,2個1,因此第五個字符串是111221。

第五個字符串的讀法是:3個1、2個2、1個1,因此第六個字符串是312211 ? ? ? ? ? ? ? ? ?

......

簡單的模擬就可以。

這道計數(shù)和讀法問題還是第一次遇到,看似挺復(fù)雜,其實仔細一看,算法很簡單,就是對于前一個數(shù),找出相同元素的個數(shù),把個數(shù)和該元素存到新的string里。

C++解法一:

1 class Solution { 2 public: 3 string countAndSay(int n) { 4 if (n <= 0) return ""; 5 string res = "1"; 6 while (--n) { 7 string cur = ""; 8 for (int i = 0; i < res.size(); ++i) { 9 int cnt = 1; 10 while (i + 1 < res.size() && res[i] == res[i + 1]) { 11 ++cnt; 12 ++i; 13 } 14 cur += to_string(cnt) + res[i]; 15 } 16 res = cur; 17 } 18 return res; 19 } 20 };?

其實我們可以發(fā)現(xiàn)字符串中永遠只會出現(xiàn)1,2,3這三個字符,假設(shè)第k個字符串中出現(xiàn)了4,那么第k-1個字符串必定有四個相同的字符連續(xù)出現(xiàn),假設(shè)這個字符為1,則第k-1個字符串為x1111y。第k-1個字符串是第k-2個字符串的讀法,即第k-2個字符串可以讀為“x個1,1個1,1個y” 或者“*個x,1個1,1個1,y個*”,這兩種讀法分別可以合并成“x+1個1,1個y” 和 “*個x,2個1,y個*”,代表的字符串分別是“(x+1)11y” 和 "x21y",即k-1個字符串為“(x+1)11y” 或 "x21y",不可能為“x1111y”.

比如將前12個數(shù)字打印一下,發(fā)現(xiàn)一個很有意思的現(xiàn)象,不管打印到后面多少位,出現(xiàn)的數(shù)字只是由1,2和3組成,網(wǎng)上也有人發(fā)現(xiàn)了并分析了原因 (http://www.cnblogs.com/TenosDoIt/p/3776356.html),前12個數(shù)字如下:

1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 3 1 1 2 2 2 1 1 1 3 2 1 3 2 1 1 1 1 3 1 2 1 1 1 3 1 2 2 1 3 2 1 1 3 1 1 1 2 3 1 1 3 1 1 2 2 1 1 1 1 3 1 2 2 1 1 3 3 1 1 2 1 3 2 1 1 3 2 1 2 2 2 1 1 1 3 1 1 2 2 2 1 2 3 2 1 1 2 1 1 1 3 1 2 2 1 1 3 1 2 1 1 3 2 1 1

?

轉(zhuǎn)載于:https://www.cnblogs.com/ariel-dreamland/p/9138400.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode(38): 报数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。