亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

題目鏈接:Z 字形變換

方法一

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

題目要求構造一個從左到右的Z型矩陣。

通過分析,可以看出這個Z型矩陣的特點

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

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

其余情況均可滿足。

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

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

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

共兩種情況:

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

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

當一個周期運行完時,又會回到新周期的第一列。

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

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows==1||numRows>=s.size())//特殊情況進行排除
        return s;
      int r=numRows;//矩陣的行數(shù)
      int t=2*r-2;//周期所含字符個數(shù)
      int len=s.size();//字符串的長度
      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++;//向下移動
        }
        else{
            x--;//向上移動
            y++;//向右移動
        }  
    }
    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;
    }
};

時間復雜度=o(nr)

空間復雜度=o(nr)

方法二

——壓縮矩陣

在第一種方法,需要構造一個二維矩陣,但是其實只使用了其中的部分空間,這樣就導致浪費了許多空間,因此可以對矩陣進行壓縮。

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

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

class Solution {
public:
    string convert(string s, int numRows) {
    int len=s.size();//字符串長度
    int r=numRows;//矩陣行數(shù)
    int t=2*r-2;//周期所含字符個數(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++;//向下移動
            else
            x--;//向上移動
        }
        string ans;
        for (auto &row : v1) {//遍歷矩陣,掃描字符并添加
            ans += row;
        }
    return ans;
    }
};

時間復雜度:o(n)

空間復雜度:o(n)

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

相關文章

  • C語言快速實現(xiàn)掃雷小游戲

    C語言快速實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • vscode實現(xiàn)本地代碼自動同步到遠程機器的步驟

    vscode實現(xiàn)本地代碼自動同步到遠程機器的步驟

    這篇文章主要介紹了vscode實現(xiàn)本地代碼自動同步到遠程機器的步驟,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 使用C語言實現(xiàn)字符串逆序操作案例

    使用C語言實現(xiàn)字符串逆序操作案例

    這篇文章主要介紹了使用C語言實現(xiàn)字符串逆序操作案例,本文包含使用C語言的兩種方法去實現(xiàn),遞歸和非遞歸,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)拼圖游戲

    C語言實現(xiàn)拼圖游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++細講深淺拷貝與初始化列表如何操作

    C++細講深淺拷貝與初始化列表如何操作

    C++對象特性里的拷貝構造函數(shù)有更深入的含義,而且面試曾經(jīng)問過關于拷貝的析構問題,那么今天就好好解析一下深淺拷貝的問題;還有初始化列表的形式,這個在給對象屬性初始化的時候非常方便,建議大家熟練掌握,話不多說,開始正文
    2022-05-05
  • c++基礎語法:構造函數(shù)初始化列表

    c++基礎語法:構造函數(shù)初始化列表

    構造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時的順序是一致的,與列表的先后順序無關
    2013-09-09
  • C語言中數(shù)組的一些基本知識小結

    C語言中數(shù)組的一些基本知識小結

    這篇文章主要介紹了C語言中數(shù)組的一些基本知識小結,其中重點是對于數(shù)組的內存分配相關方面的知識整理,需要的朋友可以參考下
    2016-04-04
  • C++ 數(shù)據(jù)結構之對稱矩陣及稀疏矩陣的壓縮存儲

    C++ 數(shù)據(jù)結構之對稱矩陣及稀疏矩陣的壓縮存儲

    這篇文章主要介紹了C++ 數(shù)據(jù)結構之對稱矩陣及稀疏矩陣的壓縮存儲的相關資料,這里實現(xiàn)稀疏矩陣和對稱矩陣的壓縮存儲的實例,需要的朋友可以參考下
    2017-08-08
  • C++實現(xiàn)LeetCode(19.移除鏈表倒數(shù)第N個節(jié)點)

    C++實現(xiàn)LeetCode(19.移除鏈表倒數(shù)第N個節(jié)點)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(19.移除鏈表倒數(shù)第N個節(jié)點),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • VSCode添加頭文件(C/C++)的實現(xiàn)示例

    VSCode添加頭文件(C/C++)的實現(xiàn)示例

    這篇文章主要介紹了VSCode添加頭文件(C/C++)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論