最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言詳解Z字形變換排列的實(shí)現(xiàn)

 更新時(shí)間:2022年04月24日 11:43:21   作者:Fengliguantou@  
Z字形變換排列就是指將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列,下面讓我們用C語言來實(shí)現(xiàn)

題目鏈接:Z 字形變換

方法一

——找規(guī)律模擬數(shù)組

題目要求構(gòu)造一個(gè)從左到右的Z型矩陣。

通過分析,可以看出這個(gè)Z型矩陣的特點(diǎn)

Z型矩陣就是如圖中的橙色,綠色這樣部分組合在一起的,Z型矩陣就是由一個(gè)個(gè)這樣相同周期組成的。

這里有一種情況需要特殊討論,當(dāng)矩陣只有一行時(shí),直接返回原字符。

其余情況均可滿足。

其周期的構(gòu)成滿足這樣一個(gè)規(guī)律:

在第一列向下填寫矩陣行數(shù)r個(gè)字符,接著向其右上部分共(r-2)列分別填寫一個(gè)字符。Z型矩陣的周期t=r+r-2=2*r-2,每個(gè)周期會(huì)占用矩陣的r-1列,總共有 字符長(zhǎng)度len/t個(gè)周期(將最后一個(gè)周期視作完整周期)。

因此創(chuàng)建一個(gè)具有r行c列的的二維矩陣,(這里在計(jì)算列的時(shí)候需要多+一個(gè)周期,因?yàn)槌ǖ挠?jì)算會(huì)舍去余數(shù))。一開始從(0,0)這個(gè)位置開始填寫字符,通過判斷i%t與r-1的大小決定向上移動(dòng)還是向下移動(dòng)。

共兩種情況:

i%t<r-1 :說明這時(shí)矩陣正在填寫第一列的數(shù)字,這時(shí)只需要向下移動(dòng)

i%t>=r-1:說明第一列已經(jīng)填寫好了,這時(shí)需要向右上方進(jìn)行填寫字符,所以需要向右移動(dòng)一位,向上移動(dòng)一位。

當(dāng)一個(gè)周期運(yùn)行完時(shí),又會(huì)回到新周期的第一列。

再次遍歷矩陣,將存儲(chǔ)有字符的位置加入到一個(gè)新的字符串中。

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows==1||numRows>=s.size())//特殊情況進(jìn)行排除
        return s;
      int r=numRows;//矩陣的行數(shù)
      int t=2*r-2;//周期所含字符個(gè)數(shù)
      int len=s.size();//字符串的長(zhǎng)度
      int c=(len+t)/t*(r-1);//二維矩陣列數(shù)
      vector<string> v1 (r,string(c,0));
    for(int i=0, x=0,y=0;i<len;i++){
        v1[x][y]=s[i];
        
        if(i%t<r-1){
            x++;//向下移動(dòng)
        }
        else{
            x--;//向上移動(dòng)
            y++;//向右移動(dòng)
        }  
    }
    string ans;
    for(int i=0;i<r;i++){//遍歷矩陣,掃描字符并添加
        for(int j=0;j<c;j++){
            if(v1[i][j])
            ans+=v1[i][j];
        }
    }
    return ans;
    }
};

時(shí)間復(fù)雜度=o(nr)

空間復(fù)雜度=o(nr)

方法二

——壓縮矩陣

在第一種方法,需要構(gòu)造一個(gè)二維矩陣,但是其實(shí)只使用了其中的部分空間,這樣就導(dǎo)致浪費(fèi)了許多空間,因此可以對(duì)矩陣進(jìn)行壓縮。

依舊是將矩陣只有一行的情況進(jìn)行額外討論,若成立,直接返回原字符串。 反之,創(chuàng)建一個(gè)r行1列的的string數(shù)組,通過判斷字符i的位置(與第一種方法的判斷方式一樣),直接將字符填寫到數(shù)組的對(duì)應(yīng)行。 舉例說明:

這個(gè)Z型字符在模擬數(shù)組是這樣呈現(xiàn)的:

class Solution {
public:
    string convert(string s, int numRows) {
    int len=s.size();//字符串長(zhǎng)度
    int r=numRows;//矩陣行數(shù)
    int t=2*r-2;//周期所含字符個(gè)數(shù)
     if (r == 1) {
            return s;
        }
    vector<string> v1(r);
    int x=0;
        for(int i=0;i<len;i++){
            v1[x]+=s[i];
            if(i%t<r-1)
            x++;//向下移動(dòng)
            else
            x--;//向上移動(dòng)
        }
        string ans;
        for (auto &row : v1) {//遍歷矩陣,掃描字符并添加
            ans += row;
        }
    return ans;
    }
};

時(shí)間復(fù)雜度:o(n)

空間復(fù)雜度:o(n)

到此這篇關(guān)于C語言詳解Z字形變換排列的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語言Z字形變換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 輸入一行數(shù)字(含負(fù)數(shù))存入數(shù)組中的案例

    C++ 輸入一行數(shù)字(含負(fù)數(shù))存入數(shù)組中的案例

    這篇文章主要介紹了C++ 輸入一行數(shù)字(含負(fù)數(shù))存入數(shù)組中的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 關(guān)于c語言的一個(gè)小bug詳解

    關(guān)于c語言的一個(gè)小bug詳解

    以下是對(duì)c語言中的一個(gè)小bug進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • C++交換指針實(shí)例

    C++交換指針實(shí)例

    這篇文章主要介紹了C++交換指針實(shí)例,針對(duì)C與C++交換指針的方法進(jìn)行了較為詳細(xì)的對(duì)比分析,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制

    基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制

    圣誕節(jié)快到了(雖然還有十天),一起來用MATLAB畫個(gè)簡(jiǎn)單圣誕樹叭~代碼幾乎取消了全部的循環(huán),因此至少需要17b之后的版本,僅存的循環(huán)用來讓樹旋轉(zhuǎn)起來,讓雪花飄落起來,讓樹頂上的星光搖曳起來~感興趣的可以試一試
    2022-12-12
  • 在C語言編程中使用變量的基礎(chǔ)教程

    在C語言編程中使用變量的基礎(chǔ)教程

    這篇文章主要介紹了在C語言編程中使用變量的基礎(chǔ)教程,特別需要注意C語言中的指針變量,需要的朋友可以參考下
    2016-02-02
  • 詳解C++ Qt中堆疊窗體的使用案例

    詳解C++ Qt中堆疊窗體的使用案例

    這篇文章主要為大家詳細(xì)介紹了C++ Qt中堆疊窗體的使用案例,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)QT有一定的幫助,感興趣的小伙伴可以了解一下
    2023-08-08
  • C語言WinSock學(xué)習(xí)筆記

    C語言WinSock學(xué)習(xí)筆記

    本篇文章主要介紹了C語言WinSock學(xué)習(xí)筆記,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2007-12-12
  • visual studio 建立dll類型工程、控制臺(tái)程序

    visual studio 建立dll類型工程、控制臺(tái)程序

    這篇文章主要介紹了visual studio 建立dll、控制臺(tái)類型工程的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • 利用C語言如何實(shí)現(xiàn)一些簡(jiǎn)單圖形的打印

    利用C語言如何實(shí)現(xiàn)一些簡(jiǎn)單圖形的打印

    這篇文章主要給大家介紹了關(guān)于利用C語言如何實(shí)現(xiàn)一些簡(jiǎn)單圖形的打印的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C語言深入探索動(dòng)態(tài)內(nèi)存分配的使用

    C語言深入探索動(dòng)態(tài)內(nèi)存分配的使用

    給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-04-04

最新評(píng)論

高密市| 泽普县| 北宁市| 雅江县| 永兴县| 屏山县| 饶河县| 夏邑县| 周口市| 邓州市| 洪泽县| 桦南县| 思南县| 梁河县| 米林县| 南木林县| 金溪县| 甘肃省| 当雄县| 阳江市| 龙游县| 尚志市| 额敏县| 漳平市| 台中县| 清新县| 阿克苏市| 蓝山县| 拜城县| 班戈县| 婺源县| 礼泉县| 锡林郭勒盟| 长泰县| 宜黄县| 嘉禾县| 巴南区| 香港 | 囊谦县| 上饶县| 大丰市|