ZigZag Conversion2015年6月23日

题目:

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、通过字符串的长度和numRows大小算出商和余数

2、通过商和余数判断每一行元素的个数,各行元素个数存放在int[] row

3、逐行对应出每一行元素在源字符串中的位置,并根据位置取出相应字符添加到返回字符串的末尾

解答:

1158 / 1158 test cases passed.
Status: Accepted
Runtime: 372 ms
Submitted: 2 minutes ago
public class Solution {
     public String convert(String s, int numRows) {
            StringBuilder result = new StringBuilder("");
            int len = s.length();
            if(numRows == 1 || len<=numRows){
                return s;
            }
            int quotient = len / (2*numRows -2);
            int remainder = len % (2*numRows -2);
            int[] row = new int[numRows];

            //求数组row
            for(int i=0; i<numRows; i++){
                if(i==0){
                    if(remainder > i) {
                        row[i] = quotient + 1;
                    }else{
                        row[i] = quotient;
                    }

                }else if(i == numRows -1){
                    if(remainder > i) {
                        row[i] = quotient + 1;
                    }else{
                        row[i] = quotient;
                    }
                }else{
                    if(remainder > i && remainder <= numRows) {
                        row[i] = 2*quotient + 1;
                    }else if(remainder > numRows){
                        if((remainder - numRows) >= (numRows-1-i)){
                             row[i] = 2*quotient + 2;
                        }else{
                             row[i] = 2*quotient + 1;
                        }

                    }else{
                        row[i] = 2*quotient;
                    }
                }
            }

            //逐行取出源字符串对应位置的字符添加到result
            for(int i=0; i<numRows; i++) {
                if(i==0 || i==numRows-1){
                    for(int j=0; j<row[i]; j++ ){
                         result.append(s.charAt(i+j*(2*numRows-2)));
                    }
                }else{
                    for(int j=0; j<row[i]; j++ ){
                        if(j%2==0){
                            result.append(s.charAt(i+j/2*(2*numRows-2)));
                        }else{
                            result.append(s.charAt(i+(j-1)/2*(2*numRows-2)+2*numRows-2-2*i));
                        }

                    }
                }

            }

            return result.toString();

      }
}
时间: 2024-10-16 15:46:34

ZigZag Conversion2015年6月23日的相关文章

2014年4月23日 10:22:08

step 1 : 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象. 按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的. 这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区.然后后台去解析缓冲区的字节流. http://cuisuqiang.iteye.com/blog/

软考中高项学员:2016年3月23日作业

软考中高项学员:2016年3月23日作业 一.项目进度管理1.进度管理包括哪六个过程?2.什么是滚动式规划?3.什么是控制账户.规划组合?4.请说明FS.FF.SS.SF的含义.5.虚活动的含义?6.三种依赖关系是哪三种?7.活动资源估算的方法.工具和技术?(记)8.活动历时估算的方法.工具和技术?(记)9.何时可以用类比估算?10.参数估算的含义?11.三点估算公式?标准差计算公式?正负一倍的标准差情况下,概率是多少?2倍的呢?3倍的呢?12.后备分析中,应急时间=时间储备=缓冲时间吗?13.

阿西莫夫 - 神们自己(2015年6月23日)

<神们自己> 作 者:阿西莫夫译 者:崔正男系 列:出 版:江苏凤凰文艺出版社字 数:230千字阅读完成:2015年6月23日

第17期中国智能家居主题沙龙将于5月23日在京举行

中国智能家居主题沙龙已经办16期,为中国智能家居的发展贡献了自己的力量,在这轮智能家居热潮中,沙龙将继续为政府.投资机投.智能家居产品提供商.智能家居方案提供商,智能家居集成商,智能家居渠道提供多方位的合作,促进行业的快速爆发. 活动宗旨: 搭建行业用户与企业沟通的桥梁,以交流.合作.服务为目的,探讨行业现状及走势,推广普及新理念.建立智能家居沟通平台以宣传企业品牌,推广新技术,展示新产品.根据智能家居行业各产业链上下游人士的需求,有针对性地提供服务,促进行业发展. 活动背景: 2013年初<国

高级:2015年10月23日作业答案

高级学员:2015年10月23日作业一.业务流程管理与重组1.流程管理的本质与核心是什么: 流程管理的核心是流程,流程管理的本质就是构造卓越的业务流程.2.流程管理与BPR的区别: 流程管理是以一种规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法.与业务流程重组的定义相似.流程管理的思想包含了BPR,但比BPR的概念更广泛,更适合现实需要.3.业务流程改进的过程和方法中,分析问题用哪2个图:寻找原因用什么图. 分析问题采用头脑风暴法.矩阵图法,寻找原因用鱼骨图法

高级学员:2015年10月23日作业

高级学员:2015年10月23日作业一.业务流程管理与重组1.流程管理的本质与核心是什么:2.流程管理与BPR的区别:3.业务流程改进的过程和方法中,分析问题用哪2个图:寻找原因用什么图.4.流程的分析与设计方法是哪六条(只答小标题):5.BPR的首要问题是什么:6.BPR的实施会引起企业哪3个方面的变化.二.知识管理1.对于项目组织来说,什么是知识.2.隐性知识的共享方法有哪4条:三.项目整体绩效评估1.什么是3E审计:2.霍尔从哪3个维度考察系统工程.3.用什么分别解决:确定性.可测定的不确

云计算之路-阿里云上-寒流来袭:2014年12月23日21:45-23:15网站故障

1个多小时间的网站故障给大家带来很大的麻烦,在这里我们表示深深的歉意!希望大家能够谅解! 这两天上海的气温在回升,而杭州的云上却突然袭来一股寒流. 12月23日晚上,阿里云进行了一次RDS的发布,在这次发布中自动地修改了我们的数据库连接数限制,谁也不知道,然后... 21:45:52左右开始,日志中出现大量执行时间超过5秒的请求. 然后出现超过10秒.20秒...甚至超过100秒的请求. 21:46:50左右,开始出现数据库连接错误: System.Data.SqlClient.SqlExcep

5月23日------疯狂猜成语-----四周第五次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜

疯狂猜成语-----四周第四次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜 会议内容:这是冲刺最后一天,基本任务已经完成,所以接下来的任务就是寻找用户体验并且从中找出不足. 这是小组成员对用户体验需要记录的信息,在体验过程中用户要对软件系统提出意见和建议,小组成员要记录在案,并且在后期对其进行修改. 用户姓名 联系电话 所用时间 用户使用过程中出现的问题 用户评价 用户对产品提出的意见 自己对意见的解决办法   5月23日------疯狂猜成语-----四周第五次站立会议 参会

老男孩教育每日一题-2017年05月23日-一个100M的分区,写入0.5K的,或写入1M的,可以写多少?

1.题目 老男孩教育每日一题-2017年05月23日-一个100M的磁盘分区,写入0.5K的文件,或写入1M的文件,分别可以写多少个?为什么? 2.参考答案 一个100M的磁盘分区,写入0.5K的文件,或写入1M的文件,分别可以写多少个?为什么?错误解答:很容易计算1K的个数:100*1000=100000个,1M文件的个数:100/1=100个 解答思想:先答几点知识 a.上面的考试题考察的是文件系统inode和block知识.b.inode是存放文件属性信息的(也包含指向文件实体的指针),默