ZigZag Conversion

本文介绍了一种将字符串以Z形方式分布在多行上的算法,并按行读取形成的Z形字符串。通过示例展示了如何将PAYPALISHIRING以特定的行数排列并重新读取。提供了一个Java实现方案,包括完整的代码示例。

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".

 1 public class Solution {
 2     public String convert(String s, int nRows) {
 3         if(nRows<=1 || s.length()<=0) return s;
 4         StringBuilder sb = new StringBuilder();
 5         for(int i=0;i<nRows;i++){
 6             for(int j=0,index=i;index<s.length();j++,index=(nRows+nRows-2)*j+i){
 7                 sb.append(s.charAt(index));//add red char
 8                 if(i==0 ||i ==nRows-1)// first and last line don't have green char
 9                     continue;
10                 if(index+(nRows-i-1)*2<s.length()){
11                     sb.append(s.charAt(index+(nRows-i-1)*2));
12                 }
13             }
14         }
15         return sb.toString();
16     }
17 }
View Code

 if(index+(nRows-i-1)*2<len)

index<len

转载于:https://www.cnblogs.com/krunning/p/3552026.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值