每天一道Rust-LeetCode(2019-06-02) Z 字形变换

坚持每天一道题,刷题学习Rust.
LeetCode原题
Z 字形变换

题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);
示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"

解题过程

关键思路如下:
找对每个位置对应的坐标,都是可以计算出来的
解释:
0 2n-2 4n-4
L D R
E O E I I
E C I H N
T S G
n-1 3n-3 5n-5

impl Solution {pub fn convert(s: String, num_rows: i32) -> String {if num_rows <= 1 {return s;}let lens = s.len();let s = s.as_bytes();let mut s2 = String::new();let n = num_rows as usize;let t = n - 1;//一行为单位向下走,计算每列的位置for r in 0..n {//最多也就是n列了,for c in 0..(lens / n + 1) {if r == 0 {//0,2n-2,4n-4let i = c * 2 * (n - 1);if i >= lens {continue;}s2.push(s[i] as char);} else if r == t {//n-1 3n-3 5n-5let i = (c * 2 + 1) * (n - 1);if i >= lens {continue;}s2.push(s[i] as char);} else {let first = c * 2 * (n - 1) + r;let last = (c + 1) * 2 * (n - 1) - r;//                    println!("first={},last={}", first, last);if first >= lens {continue;}s2.push(s[first] as char);if last >= lens {continue;}s2.push(s[last] as char);//每行有两个,注意先后顺序}}}s2}
}
#[cfg(test)]
mod test {use super::*;#[test]fn test_conversion() {assert_eq!("LCIRETOESIIGEDHN",Solution::convert(String::from("LEETCODEISHIRING"), 3));assert_eq!("LDREOEIIECIHNTSG",Solution::convert(String::from("LEETCODEISHIRING"), 4));assert_eq!("LEETCODEISHIRING",Solution::convert(String::from("LEETCODEISHIRING"), 1));}
}

一点感悟

由于不熟悉rust标准库,String转字符Slice,u8和char之间的转换都要查文档.

其他

欢迎关注我的github,本项目文章所有代码都可以找到.

转载于:https://www.cnblogs.com/baizx/p/10964783.html

每天一道Rust-LeetCode(2019-06-02)相关推荐

  1. 前端面试每日3+1(周汇总2019.06.02)

    周汇总 2019.06.02 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己). 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯, ...

  2. 多线程题目 2019.06.02 晚

    使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象,房屋中的一桶水被猫和狗共享.猫和狗轮流喝水(狗喝的多,猫喝的少),当水被喝尽时,猫和狗进入死亡状态.猫或狗 ...

  3. 《惢客创业日记》2019.06.02(周日)《惢客》021 目前的市场现状是什么样的?(十二)

    今天是星期日,也是<惢客>有声书的分享日,继续分享我录制的<惢客>有声书第二十一集<目前的市场现状是什么样的?(十二)> 各位关注<惢客>有声书的小伙伴 ...

  4. java web开发学习手册_【Java手册】Java开发手册_华山版(2019.06)

    版本号:1.5.0 更新日期:2019.06.19 制定团队:阿里巴巴与Java社区开发者 更新亮点:华山版,新增21条设计规约,修改描述112处,完善若干处示例 2017年春天,<阿里巴巴Ja ...

  5. AI英特尔杯公开课:2019.06.27在线直播《研究生人工智能创新大赛—AI赋能,创新引领》课堂笔记和感悟(二)

    AI英特尔杯公开课:2019.06.27在线直播<研究生人工智能创新大赛-AI赋能,创新引领>课堂笔记和感悟(二) 导读      讲解总体不错,知识点比较基础,适合入门,各种主流框架都有 ...

  6. AI英特尔杯公开课:2019.06.27在线直播《研究生人工智能创新大赛—AI赋能,创新引领》课堂笔记和感悟(一)

    AI英特尔杯公开课:2019.06.27在线直播<研究生人工智能创新大赛-AI赋能,创新引领>课堂笔记和感悟(一) 导读      讲解总体不错,知识点比较基础,适合入门,各种主流框架都有 ...

  7. [LeetCode] 面试题 02.07. 链表相交

    LeetCode 面试题 02.07.链表相交 思路 题目的本意其实就是求两个链表相交处结点的指针,并返回该结点指针 步骤: Step1.分别用两个指针curA.curB指向两个链表A.B的头结点 S ...

  8. 【阅读材料精选 From-to-Date:2019.05.25~2019.06.28】

    [阅读材料精选 From-to-Date:2019.05.25~2019.06.28] 重点内容 [文本数据集] github:https://github.com/imhuster/funNLP [ ...

  9. paper survey(2019.06.11)——卷积网络高阶特征表示

    类似于博文< paper survey(2019.06.05)--卷积网络feature map的传递与利用> 本博文也是系列论文的阅读笔记(基本都是CVPR和ICCV的论文). 对于跟本 ...

  10. 2021.06.02会解方程的计算器

    2021.06.02会解方程的计算器 (题目来源:) 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主 ...

最新文章

  1. 从量子物理到AI医疗,这位清华博士后想用十年弥补病理医生的百年缺口
  2. 一份超级全面的PHP面试题
  3. 超过3000赞的「机器学习路线图」,教你升级打怪全攻略
  4. electerm,免费开源的SSH桌面终端,像xshell、termius一样好用
  5. 安卓模拟器切换横屏之后怎么返回竖屏
  6. 【Kafka】ERROR Error when sending message to topic topic_lcc with key: null, value: 4 bytes with error
  7. 中国开源燃烧!Zilliz 获全球开源基础软件最大单笔融资 4300 万美元
  8. Android APK反编译详解 .
  9. minio获取上传文件_Springboot集成Minio实现对象存储服务
  10. 使用Kotlin进行Android开发
  11. PHP array_rand随机获取数组中的数据
  12. 【C++游戏】日常学生党摸鱼小游戏——职业作秀V1.5.1(图文英雄解说攻略)游戏由c++与易语言配合完成
  13. Excel VBA宏
  14. 离散数学编程实现真值表输出
  15. 访问共享服务器的没有权限文件夹权限设置,访问共享文件夹的时候提示没有权限访问网络资源怎么解决...
  16. Mybatis-Plus入门(一)
  17. 前端笔记 -- 不重复造轮子(遇到就更新内容)
  18. Linux互信及互信失效问题
  19. C语言字母的组合,C语言求字母的全部组合
  20. ubuntu16.04对比工具Meld安装和使用

热门文章

  1. 苹果mac矢量图形设计软件:Illustrator
  2. 技巧|在 Mac 上拷贝(复制)、粘贴的方法
  3. iOS开发之Swift 4 JSON 解析指南
  4. 蓝牙设备一键切换工具ToothFairy for Mac中文
  5. 3D建模设计软件Rhino 7 for Mac
  6. 如何在 Mac 上更改特定应用程序的语言?
  7. 如何对MacBook上坏掉的USB-C接口进行故障排除?
  8. UltraEdit键盘快捷键
  9. 微信实现双向跨境支付,将向香港用户开放内地支付服务
  10. HDU 2054 大数比较