[LeetCode]ZigZag Conversion
生活随笔
收集整理的這篇文章主要介紹了
[LeetCode]ZigZag Conversion
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:ZigZag Conversion
一串字符按照Z字形的數(shù)組給了我們,要求轉成原本的順序。
思路:
統(tǒng)計“|/”的個數(shù);
豎著的和斜著的下標有對應關系;
豎著的:k = j*(2*numRows - 2) + i;
斜著的(不含兩個端點):k = (j + 1)*(2*numRows - 2) - i;
注意:可能會有殘缺的部分。
/****************************************************************** ZigZag Conversion 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 text, int nRows); convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR". ******************************************************************/ #include <stdio.h> #include <memory.h>char* convert(char* s, int numRows) {int length = strlen(s);printf("%d\n",length);if(length <= numRows || numRows <= 1)return s;int zn = length/(2*numRows - 2);//Z字形豎著放時,最開始的一豎和一撇的組合整體的個數(shù)int sn = length%(2*numRows - 2);//Z字形豎著放時,剩下殘缺的組合的字母個數(shù)char *cs = (char *)malloc((length + 1)*sizeof(char));memset(cs,0,(length + 1)*sizeof(char));int index = 0,k = 0;for (int i = 0;i < numRows;i++){//完整組合的對應轉換for(int j = 0;j < zn;j++){//豎線上的點坐標對應公式k = j*(2*numRows - 2) + i;cs[index++] = s[k];if(i > 0 && i < numRows - 1){//斜線上的不含兩端點的點坐標對應公式k = (j + 1)*(2*numRows - 2) - i;cs[index++] = s[k];}}if(sn > i){//殘缺組合的對應轉換k = zn*(2*numRows - 2) + i;cs[index++] = s[k];if(i > 0 && i < numRows - 1 && sn > 2*numRows - 2 - i){k = (zn + 1)*(2*numRows - 2) - i;cs[index++] = s[k];}}}return cs; }void main(){char s[] = "Apalindromeisaword,phrase,number,orothersequenceofunitsthatcanbereadthesamewayineitherdirection,withgeneralallowancesforadjustmentstopunctuationandworddividers.";char *cs = convert(s,2);printf("%s\n",cs);free(cs); }?
轉載于:https://www.cnblogs.com/yeqluofwupheng/p/6679118.html
總結
以上是生活随笔為你收集整理的[LeetCode]ZigZag Conversion的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转Excel系列-SUMIFS函数使用
- 下一篇: BZOJ 2820 莫比乌斯反演