字符串按照Z旋转90度然后上下翻转的字形按行输出字符串--ZigZag Conversion
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 s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation: P I N
A L S I G
Y A H R
P I
个人思路:
先计算出列数,用二维数组处理
然后分为字符落在竖和斜杠两种情况
竖:分为是否可以落满行的个数
斜杠同理
同时计算出当前竖的第一个值的列号
public String convert(String s, int numRows) {//ZigZag Conversion
int len=s.length();
if(numRows==1||s==null||s.equals(" ")||len<=numRows) return s;
else{
char[] result=new char[len];
char[] cs=s.toCharArray();
int cLen = 0;
int split1=2*(numRows-1);
int nDouble=len/split1;
if(len%split1==0){
cLen=(1+numRows-2)*nDouble;
}else if(len%split1<=numRows){
cLen=(1+numRows-2)*nDouble+1;
}else{
cLen=(1+numRows-2)*nDouble+(len%split1)-(numRows-1);
}
char[][] ch=new char[numRows][cLen];
int dif=split1;
for(int k=0;k<len;k++){
// System.out.println("start++++::::"+k);
if(k%dif==0){ //up start
int t=k>0?(k/2):0;
if(k+numRows>len){
for(int j=0;j<len-k;j++){
// System.out.println("45-----"+j+","+t+"="+(k+j));
ch[j][t]=cs[k+j];
}
k=len-1;
break;
}else{
for(int j=0;j<numRows;j++){
// System.out.println("52-----"+j+","+t+"="+(k+j));
ch[j][t]=cs[k+j];
}
k=k+numRows-2;
}
}else if((k%dif==(numRows-1))){//down start
// System.out.println(k);
int t=k+1-numRows>0?((k+1-numRows)/2):0;
int tt=numRows-1;
if(k+numRows-2>=len){
for(int j=0;j<len-k-1;j++){
--tt;
++t;
// System.out.println("64-----"+tt+","+t+"="+cs[k+j+1]);
ch[tt][t]=cs[k+j+1];
}
k=len-1;
break;
}else{
for(int j=0;j<numRows-2;j++){
--tt;
++t;
// System.out.println("t:"+tt);
// System.out.println("70-----"+tt+","+t+"="+cs[k+j+1]);
ch[tt][t]=cs[k+j+1];
}
k=k+numRows-2;
// System.out.println("79----"+k);
}
}
}
int next=0;
for(int i=0;i<ch.length;i++){
for(int j=0;j<ch[0].length;j++){
// System.out.print(ch[i][j]);
if(ch[i][j]!='\u0000'){
result[next++]=ch[i][j];
}
}
}
return new String(result);
}
}
字符串按照Z旋转90度然后上下翻转的字形按行输出字符串--ZigZag Conversion的更多相关文章
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- 利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- 关于android中调用系统拍照,返回图片是旋转90度
转载博客:http://blog.csdn.net/walker02/article/details/8211628 项目开发中遇到的一个问题,对于三星手机在做手机照片选择时出现图片显示不正常,研究后 ...
- 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)
背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- 解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- PyOpenCV图像逆时针旋转90度
warpAffine方法效果很搓,留下大片黑色区域. 使用flip和transpose可以实现逆时针旋转90度.先flip或先transpose均可. #coding:utf-8 import cv2 ...
- MTK 屏幕旋转90度
http://blog.csdn.net/ouo555/article/details/44806837 1.屏幕显示顺时针旋转90度 lk 横屏logo,顺时针旋转90度显示修改bootable/b ...
- C++ 方阵原地旋转90度
不额外申请内存(另外的一个二维数组空间),将一个方阵(二维数组)原地旋转90度,主要的思路是,由外向内,一圈圈的进行旋转(就是依次进行交换),如下图所示,当这些圈圈都交换完了之后,就完成了原地旋转了. ...
随机推荐
- 第4章 令牌端点(Token Endpoint) - IdentityModel 中文文档(v1.0.0)
令牌端点的客户端库(OAuth 2.0和OpenID Connect)作为HttpClient一组扩展方法提供.这允许HttpClient以您喜欢的方式创建和管理生命周期- 例如静态或通过像Micro ...
- Docker -v 对挂载的目录没有权限 Permission denied
1.问题 今天在使用docker挂载redis的时候老是报错 docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf ...
- Yii2设计模式——静态工厂模式
应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...
- solr搭建(linux)
Solr版本:7.4.0 Tomcat版本:8.5 Jdk版本:1.8 最好在root用户下进行操作,为了更方便初学者理解,选用ubuntu操作,当然用命令操作过程是一样的,会命令操作的话看懂图形化操 ...
- 解决Android编译时出现aapt.exe finished with non-zero exit value 1(第二篇)
之前出现该错误,我用的是这个方法: https://www.cnblogs.com/tangZH/p/10691383.html 然而遗憾的是,这次不管用了,无奈,只好另寻他法,其实会出现这个错误就是 ...
- windows无人值守文件的制作_autounattend.xml
网址:http://www.windowsafg.com/office2010.html Note:网络不能是国内网络(需要FQ),否则不能生成自动应答文件. 以Windows10为例:Window ...
- 不可思议的纯 CSS 滚动进度条效果
结论先行,如何使用 CSS 实现下述滚动条效果? 就是顶部黄色的滚动进度条,随着页面的滚动进度而变化长短. 在继续阅读下文之前,你可以先缓一缓.尝试思考一下上面的效果或者动手尝试一下,不借助 JS , ...
- 【RL-TCPnet网络教程】第40章 RL-TCPnet之TFTP客户端(精简版)
第40章 RL-TCPnet之TFTP客户端 本章节为大家讲解RL-TCPnet的TFTP客户端应用,学习本章节前,务必要优先学习第38章的TFTP基础知识.有了这些基础知识之后,再搞本章节 ...
- django框架使用mysql步骤
在创建好django项目的基础上来讲解使用orm框架 注意:首先在mysql中手动或者通过命令创建一个数据库,我先创建一个名为orm的数据库. 1:在项目文件夹中的settings.py文件中配置my ...
- webrtc aecd算法解析一(原理分析)
webrtc的回声抵消(aec.aecm)算法主要包括以下几个重要模块: 回声时延估计 NLMS(归一化最小均方自适应算法) NLP(非线性滤波) CNG(舒适噪声产生) 回声时延估计 这张图很多东西 ...