leetcode38 外觀數列

2021-10-23 05:57:44 字數 1176 閱讀 3802

「外觀數列」是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下:

1

11

21

1211

111221

1 被讀作 「one 1」 (「乙個一」) , 即 11。

11 被讀作 「two 1s」 (「兩個一」), 即 21。

21 被讀作 「one 2」, 「one 1」 (「乙個二」 , 「乙個一」) , 即 1211。

給定乙個正整數 n(1 ≤ n ≤ 30),輸出外觀數列的第 n 項。

注意:整數序列中的每一項將表示為乙個字串。

由於第n個序列需要用到第n-1個序列的結果,因此很容易想到採用遞迴的方式來求解。

當n=1時,顯而易見,結果為「1」;

當n>1時,需要第n-1的結果字串;

因此,整個大過程可寫成如下形式。其中countandsay()表示返回第n個序列的字串結果。當n!=1時,需要用到第n-1個系列的字串結果,因此首先呼叫countandsay(n-1)返回第n-1個序列的結果,然後通過getcurcount()函式計算第n個序列的字串結果。

string countandsay

(int n)

getcurcount()函式的作用是計算傳入的字串,根據該字串返回下乙個字串。從第二個位置開始遍歷當前字串,如果跟前乙個字串相同,則統計次數(count初始化是1),若不相同,則結算當前位置的前乙個位置字元。由於遍歷完成後,最後乙個字元及其之前的相同的部分沒有被結算,因此最後加上該部分即可。

string getcurcount

(string str)

}//由於每次我們只結算i位置的前乙個位置的字元以及次數

//因此當迴圈遍歷後,並未計算最後乙個字元及出現次數,所以這裡需要單獨補充

ans +

=to_string

(count)

+ str[str.

size()

-1];

return ans;

}

leetcode38 外觀數列

外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1.1 2.11 3.21 4.1211 5.111221 1 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一 即 12...

LeetCode38 外觀數列

題目描述 外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1.1 2.11 3.21 4.1211 5.111221 1 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一...

leetcode 38 外觀數列

38.外觀數列 給定乙個正整數 n 1 n 30 輸出外觀數列的第 n 項。注意 整數序列中的每一項將表示為乙個字串。外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1 11 21 1211 111221 第一項是數字 1 描述前一項,這個數是 1 即 乙個...