数据结构和算法分析Java学习笔记程序员面试的那些小事

Leetcode 6.ZigZag Conversion

2016-11-11  本文已影响17人  沉默的叔叔

题目


ZigZag Conversion

题目大意:给定一个字符串和一个数字,将字符串排列成“S”形,数字代表“S”形型高度,最后返回将每一横排相加的字符串。
例如输入

PAYPALISHIRING 4

所以输出应该是

PINALSIGYAHRPI

代码如下

public class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1)
            return s;
        String an = "";//储存最后返回的字符串
        String[] str = new String[numRows];//储存“S”形的每一行
        for(int i=0;i<numRows;i++)//给字符串数组初始化
            str[i] = "";
        int r = 0;//控制字符串数组的每一行
        int flag = 1;//标记“S”形往上还是往下,即r是加还是减
        for(int i = 0;i < s.length();i++){
            str[r] = str[r] + s.charAt(i);
            //当到字符串数组的开始或者结束时反向,即flag取相反数
            if(i != 0 && r == numRows-1 && flag == 1)
                flag = 0;
            else if(i != 0 && r == 0 && flag == 0)
                flag = 1;
            if(flag == 1)
                r++;
            if(flag == 0)
                r--;
        }
        //将字符串数组连接
        for(int i=0;i<str.length;i++)
            an = an+str[i];
        return an;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读