zoukankan      html  css  js  c++  java
  • LeetCode Golang 6. Z 字形变换

    6. 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"
    解释:
    
    L     D     R
    E   O E   I I
    E C   I H   N
    T     S     G

    解法:

    思路: 等差数列, 控制循环变量达到预期效果, 画两张图就能弄出来

    参考网址:https://blog.csdn.net/qq_33022911/article/details/83616833

    func convert(s string, numRows int) string {
    
    	if numRows <= 1 || len(s) == 0 {
    		return s
    	}
    
    	rst := ""
    
    	size := 2*numRows - 2
    
    	for i := 0; i < numRows; i++ {
    		for j := i; j < len(s); j += size {
    			rst += string(s[j])
    			tmp := j + size - 2*i
    			if i != 0 && i != numRows-1 && tmp < len(s) {
    				rst += string(s[tmp])
    			}
    		}
    	}
    	return rst
    }
    

      

    大神解法中 8ms 完成用例没有看懂, 好像是用指针完成的; 贴出来12ms的:

    这里大神用了一个特性: go语言中的string中, 每个字符是可以用 uint8 来直接表示出来的, 这样就省去了切单个字符 s[j] 时候的强制转换

    原因: go语言官方别名:

    byte -> uint8

    rune -> int32

    运行结果:

    LDREOEIIECIHNTSG
    uint8

    func convert(s string, numRows int) string {
        if numRows == 1 {
    		return s
    	}
    
    	var cs []uint8
    	var count int
    	var index int
    	for i := 0; i < numRows; i++{
    		count = 0
    		index = count*(2*numRows-2) + i
    		for index < len(s){
    			cs = append(cs, s[index])
    			if i != 0 && i != numRows - 1 {
    				index = (count + 1) * (2 * numRows - 2) - i
    				if index >= len(s) {
    					break
    				}
    				cs = append(cs, s[index])
    			}
    			count++
    			index = count*(2*numRows-2) + i
    		}
    	}
    
    	return string(cs)
    }
    

      

  • 相关阅读:
    【bzoj1010】[HNOI2008]玩具装箱toy
    bzoj 3173
    bzoj 1179
    bzoj 2427
    bzoj 1051
    bzoj 1877
    bzoj 1066
    bzoj 2127
    bzoj 1412
    bzoj 3438
  • 原文地址:https://www.cnblogs.com/gettolive/p/10197415.html
Copyright © 2011-2022 走看看