美文网首页
LeetCode 6. Z 字形变换

LeetCode 6. Z 字形变换

作者: 会飞的蜗牛07 | 来源:发表于2019-01-25 11:57 被阅读0次

    题目

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

    示例:
    输入: s = "LEETCODEISHIRING", numRows = 3
    输出: "LCIRETOESIIGEDHN"

    解题思路

    分割区域,找到特定列的规律。

    解答

    char* convert(char* s, int numRows) {
        if(numRows == 1)
            return s;
        int slen = strlen(s);
        char *out = (char*)malloc(sizeof(char)*(slen + 1));
        int i, j, x = 0;
        for(i = 0; i < numRows; i++)
        {
            for(j = 0; (j * (2 * numRows -2))+ i < slen; j++)
            {
                out[x++] = s[j * (2 * numRows -2) + i];
    
                if(i != 0 && i != numRows - 1 && (j + 1)*(2 * numRows -2) - i < slen)
                    out[x++] = s[(j + 1)*(2 * numRows -2) - i];
            }
        }
        out[slen] = '\0';
        return out;
    }
    

    示意图

    输出结构.png
    如图所示,绿框中的元素满足j * (2 * numRows -2) + i的对应关系,红框中的元素是通过同一行中绿框的元素推导出来的,满足(j + 1)*(2 * numRows -2) - i

    相关文章

      网友评论

          本文标题:LeetCode 6. Z 字形变换

          本文链接:https://www.haomeiwen.com/subject/umsmjqtx.html