前記ジグザグ変換[Z字変換]

説明は、
Z型配置から左下に数指定された行に基づいて文字列を、説明します。

例えば、入力文字列は、行「LEETCODEISHIRING」の数は、次のように配置され、3です。

LCIR
ETOESIIG
EDHNは、
行右に読み取りラインに左からその後、あなたは、出力を必要とするなど、新しい文字列を生成:「LCIRETOESIIGEDHN」。


ここに画像を挿入説明
のアイデア

  • 方法1(私は)n行に文字列は、各々が自分の文字列を取得し、次に(ステッチそれはコンピューティングのさまざまなを含むので、それが推奨されていません
  • 方法2

0からnumRowsの数であり、0からnumRowsの数まで、等、Z型:順に、屈折率変化の文字列配列(ARR [インデックス])の文字列にスプライス[numRowsの数空の文字列]トラバーサルS、まあ
答え

  • パイソン
*方法1*
    def convert(self, s: str, n: int) -> str:
        if n==1: return s
        ss = ''
        for r in range(1,n+1):
            if r==1 or r==n:
                j=r-1
                while j<len(s):
                    ss += s[j]
                    j+=(2*n-3+1) #n==1时不行
            else:
                j=r-1
                count=1
                while j<len(s):
                    ss += s[j]
                    if count%2==1:
                        j += 1+(n-1-r)*2+1
                    else:
                        j += 1+(r-2)*2+1
                    count+=1
        return ss
*方法2*
   def convert(self, s: str, numRows: int) -> str:
        if numRows==1:return s
        res=['']*numRows
    
        index = 0
        flag=1
        for c in s:
            res[index]+=c
            if index==numRows-1: flag=-1
            if index==0: flag=1
            index+=flag
           
      
        return ''.join(res)
  • C ++
*方法1*
    string convert(string s, int n) {
        if (n==1) return s;
        string ss("");
        for (int r=1; r<=n; r++)
            
        {
            if (r==1 || r==n)
            {
                int j=r-1;
                while (j<s.size())
                {
                    ss += s[j];
                    j+=2*n-3+1;
                }
            }
            else
            {
                int j=r-1,count=1;
                
                while (j<s.size())
                {
                    ss+=s[j];
                    if (count%2==1)
                        j+=1+(n-1-r)*2+1;
                    else
                        j+=1+(r-2)*2+1;
                    count++;
                }
                
            }
            
        }
        return ss;
    }
*方法2*
    string convert(string s, int numRows) {
       
        if (numRows==1) return s;
        vector<string> v(numRows, "");
        int index=0,flag=1;
        for (char c: s)
        {
            v[index].push_back(c);
            if (index==numRows-1) flag=-1;
            if (index==0) flag=1;
            index+=flag;
            /*
            if (flag==1) index++;
            if (flag==-1) index--;
            */
        }
        string res("");
        for (auto t: v)
            res+=t;
        return res;
    }
公開された78元の記事 ウォン称賛7 ビュー10000 +

おすすめ

転載: blog.csdn.net/puspos/article/details/103039744