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

6. Z字形变换

作者: yahibo | 来源:发表于2019-03-13 17:59 被阅读0次

难度:中等
将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

Java实现:

public class topic6 {
    public static void main(String[] args) {
        String s = "PAYPALISHIRING";
        String result = convert(s,3);
        System.out.println(result);
    }

    public static String convert(String s, int numRows) {
        StringBuffer str = new StringBuffer();
        int length = s.length();
        int dis = (numRows-1)*2;
        if(length<=0||dis==0) {
            return s;
        }
        for(int i=0;i<numRows;i++) {
            for(int j=0;j+i<length;j+=dis) {
                str.append(s.charAt(j+i));
                if(i!=0&&i!=numRows-1&&j+dis-i<length) {
                    str.append(s.charAt(j+dis-i));
                }
            }
        }
        return str.toString();
    }    
}

C语言实现:

char* convert(char* s, int numRows);

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char* s = "agqapkdophrispmkptlattjelegorxbufruwdymshdbzvplkiykbuwgfcowtlznsrkpwib";
        char* result = convert(s, 18);
        printf("%s\n",result);
    }
    printf("\n");
    return 0;
}
char* convert(char* s, int numRows) {
    long length = strlen(s);
    char* str = (char*)malloc(sizeof(char)*length);
    int num=0;
    int dis = (numRows-1)*2;
    if (length<=1||dis==0) {
        return s;
    }
    for (int i=0; i<numRows; i++) {
        for (int j=0; j+i<length; j+=dis) {
            printf("%d %c\n",i+j,s[i+j]);
            str[num] = s[i+j];
            num++;
            if (i!=0&&i!=numRows-1&&j+dis-i<length) {
                str[num] = s[j+dis-i];
                num++;
            }
        }
    }
    str[num] = '\0';
    return str;
}

相关文章

  • Python算法-模拟过程实现算法

    6. Z 字形变换[https://leetcode-cn.com/problems/zigzag-convers...

  • 6. Z字形变换

    一、题目原型: 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:输入: s = "PAYPA...

  • 6. Z 字形变换

    题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 示例 解题思路1 顺序思维,先...

  • 6. Z字形变换

    难度:中等将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:P A H NA...

  • 6. Z 字形变换

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 ...

  • 6. Z 字形变换

    题目:https://leetcode-cn.com/problems/zigzag-conversion/[ht...

  • 6. Z 字形变换

    提示:1 <= s.length <= 1000s 由英文字母(小写和大写)、',' 和 '.' 组成1 <= n...

  • 6. Z 字形变换

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为...

  • LeetCode-6 Z字形变换

    题目:6. Z字形变换 难度:中等 分类:字符串 解决方案:字符串遍历 今天我们学习第6题Z字形变换,这是一个字符...

  • 字符串 - Z字变形

    6. Z 字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字...

网友评论

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

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