亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go?Java算法之外觀數列如何實現

發布時間:2022-08-11 09:51:05 來源:億速云 閱讀:224 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Go Java算法之外觀數列如何實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Go Java算法之外觀數列如何實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

外觀數列

給定一個正整數 n ,輸出外觀數列的第 n 項。

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

你可以將其視作是由遞歸公式定義的數字字符串序列:

countAndSay(1) = "1"

countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉換成另一個數字字符串。

前五項如下:

  • 1、1 —— 第一項是數字 1

  • 2、11 —— 描述前一項,這個數是 1 即 “ 一 個 1 ”,記作 "11"

  • 3、21 —— 描述前一項,這個數是 11 即 “ 二 個 1 ” ,記作 "21"

  • 4、1211 —— 描述前一項,這個數是 21 即 “ 一 個 2 + 一 個 1 ” ,記作 "1211"

  • 5、111221 —— 描述前一項,這個數是 1211 即 “ 一 個 1 + 一 個 2 + 二 個 1 ” ,記作 "111221"

方法一:遍歷生成(Java)

所謂的「外觀數列」,其實本質上只是依次統計字符串中連續相同字符的個數。

題目中給定的遞歸公式定義的數字字符串序列如下:

countAndSay(1) = "1";

countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉換成另一個數字字符串。

我們定義字符串 S_{i}表示countAndSay(i),我們如果要求得 S_{n},則我們需先求出 S_{n-1},然后按照上述描述的方法生成,即從左到右依次掃描字符串 S_{n-1}中連續相同的字符的最大數目,然后將字符的統計數目轉化為數字字符串再連接上對應的字符。

class Solution {
    public String countAndSay(int n) {
        String str = "1";
        for (int i = 2; i <= n; ++i) {
            StringBuilder sb = new StringBuilder();
            int start = 0;
            int pos = 0;
            while (pos < str.length()) {
                while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
                    pos++;
                }
                sb.append(Integer.toString(pos - start)).append(str.charAt(start));
                start = pos;
            }
            str = sb.toString();
        }
        return str;
    }
}

N 為給定的正整數,M 為生成的字符串中的最大長度

時間復雜度:O(N * M)

空間復雜度:O(M)

方法二:遞歸(Go)

具體的方法分析已經在上文中表述

由于每次得到的數據都是來源于上一次的結果,所以我們可以假設得到了上次的結果,繼而往后運算。這就運用到了遞歸。

func countAndSay(n int) string {
    if n == 1 {
        return "1"
    }
    s := countAndSay(n - 1)
    i, res := 0, ""
    length := len(s)
    for j := 0; j < length; j++ {
        if s[j] != s[i] {
            res += strconv.Itoa(j-i) + string(s[i])
            i = j
        }
    }
    res += strconv.Itoa(length-i) + string(s[i])
    return res
}

N 為給定的正整數,M 為生成的字符串中的最大長度

時間復雜度:O(N * M)

空間復雜度:O(M)

讀到這里,這篇“Go Java算法之外觀數列如何實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

勃利县| 萍乡市| 剑川县| 太仆寺旗| 咸宁市| 中山市| 兴义市| 沅江市| 曲阜市| 商洛市| 永兴县| 虎林市| 同心县| 滨州市| 贡嘎县| 杭州市| 扶风县| 明光市| 桐梓县| 衡水市| 铜山县| 濮阳县| 巴楚县| 南安市| 永修县| 上犹县| 金堂县| 加查县| 黄大仙区| 肃宁县| 丰台区| 阳城县| 桦川县| 和林格尔县| 石台县| 平湖市| 淮北市| 东光县| 贡觉县| 蒙阴县| 邮箱|