博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode【6】. ZigZag Conversion --思路图解与java实现
阅读量:4596 次
发布时间:2019-06-09

本文共 1488 字,大约阅读时间需要 4 分钟。

一、题目例如以下:    

     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   NA P L S I I GY   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".

       题目大意为将给定字符串按如上的“Z”字锯齿形进行重排。

二、思路

       如图。将该图形进行分区。

图一、分区图

       从以上我们能够非常清晰地依据给定字符串的索引来求出其在一个“Z”型中所处的位置。是处于竖行还是斜行。是在第几排。

思路清晰,结合图及下面代码、凝视。能够非常快明确思路。 

三、Java实现

public class Solution {    public String convert(String s, int numRows) {        int sl = s.length();        if(numRows<=1||sl<=numRows)                                   return s;                int N = (int)Math.ceil((double)sl/(2*numRows-2));  //1. 计算分区大小。最后一个区可能是充满也可能是不满。所以向上取整        int index1=0, index2=0;        int nN = 2*numRows-2;                              //2. 求出一分区内有多少元素。

竖行是numRows个。斜行需减去头尾两个元素 StringBuffer sb = new StringBuffer(); for(int iR = 1; iR<=numRows; iR++) //3. 按行进行扫描输出 { for(int jN = 1; jN<=N; jN++) //4. 扫描iR行的不同分区 { //4.1. index1为第jN块的第iR行竖值索引 index1 = (jN-1)*nN + iR; if(index1<=sl) { sb.append(s.charAt(index1-1)); } //4.2. index2为第jN块的第iR行斜值索引。斜行去掉头尾两个 if((iR!=1)&&(iR!=numRows)) { index2 = (jN-1)*nN + 2*numRows -iR; if(index2<=sl) { sb.append(s.charAt(index2-1)); } } } } return sb.toString(); } }

转载于:https://www.cnblogs.com/jzdwajue/p/6963216.html

你可能感兴趣的文章
Windows 某些软件显示"口口"解决办法
查看>>
PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析
查看>>
和同事下班路上讨论心得(服务器部署的几点问题)
查看>>
Spring学习总结五——SpringIOC容器五
查看>>
解决多个ajax页面请求,页面loading阻塞问题
查看>>
Executor
查看>>
Javascript 表单验证对象控件 + ajax简单验证重复项与ajax提交数据
查看>>
使用抽象工厂设计一个简单的交易模块
查看>>
如何将广告始终定位到网页右下角
查看>>
常用js整理
查看>>
查看oracle/mysql数据库版本号
查看>>
memset函数
查看>>
使用postman+newman+python做接口自动化测试
查看>>
实体框架继承关系。很好
查看>>
201671010110 2016 2017 2《java程序设计》
查看>>
flask的基础认识
查看>>
静态blog的免费托管部署、加域名与搜索优化(SEO)
查看>>
oracle trunc(d1[,c1])
查看>>
linux 内核定时器的实现
查看>>
Android和IOS等效MD5加密
查看>>