1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線(xiàn)溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      C++如何實(shí)現(xiàn)字型轉(zhuǎn)換字符串

      這篇文章主要介紹“C++如何實(shí)現(xiàn)字型轉(zhuǎn)換字符串”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++如何實(shí)現(xiàn)字型轉(zhuǎn)換字符串”文章能幫助大家解決問(wèn)題。

      成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括定遠(yuǎn)網(wǎng)站建設(shè)、定遠(yuǎn)網(wǎng)站制作、定遠(yuǎn)網(wǎng)頁(yè)制作以及定遠(yuǎn)網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,定遠(yuǎn)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到定遠(yuǎn)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

      ZigZag Conversion 之字型轉(zhuǎn)換字符串

      The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

      P   A   H   N
      A P L S I I G
      Y   I   R

      And then read line by line: "PAHNAPLSIIGYIR"

      Write the code that will take a string and make this conversion given a number of rows:

      string convert(string s, int numRows);

      Example 1:

      Input: s = "PAYPALISHIRING", numRows = 3
      Output: "PAHNAPLSIIGYIR"

      Example 2:

      Input: s = "PAYPALISHIRING", numRows = 4
      Output: "PINALSIGYAHRPI"
      Explanation:

      P     I    N
      A   L S  I G
      Y A   H R
      P     I

      這道題剛開(kāi)始看了半天沒(méi)看懂是咋樣變換的,上網(wǎng)查了些資料,終于搞懂了,就是要把字符串?dāng)[成一個(gè)之字型的,比如有一個(gè)字符串 "0123456789ABCDEF",轉(zhuǎn)為 zigzag 如下所示:

      當(dāng) n = 2 時(shí):

      0 2 4 6 8 A C E

      1 3 5 7 9 B D F

      當(dāng) n = 3 時(shí):

      0   4    8     C

      1 3 5 7 9 B D F

      2    6   A     E

      當(dāng) n = 4 時(shí):

      0     6        C

      1   5 7   B  D

      2 4   8 A    E

      3      9       F

      可以發(fā)現(xiàn),除了第一行和最后一行沒(méi)有中間形成之字型的數(shù)字外,其他都有,而首位兩行中相鄰兩個(gè)元素的 index 之差跟行數(shù)是相關(guān)的,為  2*nRows - 2, 根據(jù)這個(gè)特點(diǎn),可以按順序找到所有的黑色元素在元字符串的位置,將他們按順序加到新字符串里面。對(duì)于紅色元素出現(xiàn)的位置(Github 上可能無(wú)法正常顯示顏色,請(qǐng)參見(jiàn)博客園上的帖子)也是有規(guī)律的,每個(gè)紅色元素的位置為 j + 2 x numRows-2 - 2 x i, 其中,j為前一個(gè)黑色元素的 index,i為當(dāng)前行數(shù)。 比如當(dāng) n = 4 中的那個(gè)紅色5,它的位置為 1 + 2 x 4-2 - 2 x 1 = 5,為原字符串的正確位置。知道了所有黑色元素和紅色元素位置的正確算法,就可以一次性的把它們按順序都加到新的字符串里面。代碼如下:

      解法一:

      class Solution {
      public:
          string convert(string s, int numRows) {
              if (numRows <= 1) return s;
              string res;
              int size = 2 * numRows - 2, n = s.size();
              for (int i = 0; i < numRows; ++i) {
                  for (int j = i; j < n; j += size) {
                      res += s[j];
                      int pos = j + size - 2 * i;
                      if (i != 0 && i != numRows - 1 && pos < n) res += s[pos];
                  }
              }
              return res;
          }
      };

      若上面解法中的規(guī)律不是很好想的話(huà),我們也可以用下面這種更直接的方法來(lái)做,建立一個(gè)大小為 numRows 的字符串?dāng)?shù)組,為的就是把之字形的數(shù)組整個(gè)存進(jìn)去,然后再把每一行的字符拼接起來(lái),就是想要的結(jié)果了。順序就是按列進(jìn)行遍歷,首先前 numRows 個(gè)字符就是按順序存在每行的第一個(gè)位置,然后就是 ‘之" 字形的連接位置了,可以發(fā)現(xiàn)其實(shí)都是在行數(shù)區(qū)間 [1, numRows-2] 內(nèi),只要按順序去取字符就可以了,最后把每行都拼接起來(lái)即為所求,參見(jiàn)代碼如下:

      解法二:

      class Solution {
      public:
          string convert(string s, int numRows) {
              if (numRows <= 1) return s;
              string res;
              int i = 0, n = s.size();
              vector vec(numRows);
              while (i < n) {
                  for (int pos = 0; pos < numRows && i < n; ++pos) {
                      vec[pos] += s[i++];
                  }
                  for (int pos = numRows - 2; pos >= 1 && i < n; --pos) {
                      vec[pos] += s[i++];
                  }
              }
              for (auto &a : vec) res += a;
              return res;
          }
      };

      關(guān)于“C++如何實(shí)現(xiàn)字型轉(zhuǎn)換字符串”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。


      網(wǎng)站欄目:C++如何實(shí)現(xiàn)字型轉(zhuǎn)換字符串
      分享URL:http://ef60e0e.cn/article/gsssdg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        吉木乃县| 梁平县| 南川市| 元阳县| 酒泉市| 庐江县| 陇川县| 宝鸡市| 柳林县| 浙江省| 巴楚县| 建始县| 灵台县| 隆德县| 临夏市| 屏山县| 沙河市| 西乡县| 济宁市| 利辛县| 正蓝旗| 肃宁县| 怀柔区| 夏邑县| 黄浦区| 普宁市| 邵阳市| 平罗县| 盐津县| 通河县| 台江县| 阿拉善右旗| 遂昌县| 盐亭县| 镇沅| 大兴区| 名山县| 铜川市| 浑源县| 绥芬河市| 延长县|