[LeetCode][M] 6. Z 字形變換

將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列。

比如輸入字符串為 "LEETCODEISHIRING" 行數(shù)為 3 時(shí),排列如下:

L C I R
E T O E S I I G
E D H N

之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個(gè)新的字符串,比如:"LCIRETOESIIGEDHN"。

請(qǐng)你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù):

string convert(string s, int numRows);

示例 1:

輸入: s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"

示例 2:

輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"

解釋:

L D R
E O E I I
E C I H N
T S G

解題思路

遍歷所有字符,維護(hù)兩個(gè)變量,當(dāng)前行號(hào)以及方向。當(dāng)當(dāng)前行號(hào)為最大值或者最小值時(shí),變換方向。

實(shí)現(xiàn)代碼

//執(zhí)行用時(shí) :54 ms, 在所有 Java 提交中擊敗了27.85%的用戶
//內(nèi)存消耗 :67.7 MB, 在所有 Java 提交中擊敗了15.13%的用戶
class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1) {
            return s;
        }
        
        int rows = Math.min(numRows, s.length());
        String[] lines = new String[rows];
        int curRow = 0;
        boolean down = false;
        for (int i = 0; i < s.length(); i++) {
            if (lines[curRow] == null) {
                lines[curRow] = s.substring(i, i + 1);
            } else {
                lines[curRow] += s.substring(i, i + 1);
            }
            
            if (curRow == 0 || curRow == rows - 1) {
                down = !down;
            }
            
            curRow = down ? curRow + 1 : curRow - 1;
        }
        
        String result = "";
        for (String line : lines) {
            result += line;
        }
        return result;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目描述: 將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列。比如輸入字符串為 "LEETC...
    LeeYunFeng閱讀 996評(píng)論 0 50
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 4,044評(píng)論 0 2
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,716評(píng)論 0 5
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,338評(píng)論 0 10
  • Z字形變換 將字符串"PAYPALISHIRING"以Z字形排列成給定的行數(shù): P A H N A ...
    不愛去冒險(xiǎn)的少年y閱讀 471評(píng)論 0 0

友情鏈接更多精彩內(nèi)容