LeetCode Scala 6. ZigZag Conversion Z 字形变换

字符串拼接法

构建一个 mutable.HashMap 把在里面新建 numRows 个字符串,用他们的行数作为 key,字符串作为 value,然后就构建一个 while,直到把所有的字符都遍历完成为止,这个算法不涉及任何的数学知识,就是相当于设置一个指针,在 n 行之间反复扫描,直到把所有的字符都扫描进去为止,最后再把这些字符串拼接一下作为答案返回

object Solution {
  def convert(s: String, numRows: Int): String = {
    if (s == "") ""
    else if (numRows == 1) s
    else {
      val resMap = scala.collection.mutable.HashMap[Int, String]()
      for (i <- 0 until numRows) resMap += (i -> "")
      var switch = 0
      var j = 0
      var i = 0
      for(j <- 0 until s.length) {
        resMap(i) += s(j)
        if (i >= numRows-1) switch = 1
        else if (i <= 0) switch = 0
        if (switch == 0) {
          i += 1
        } else if (switch == 1) {
          i -= 1
        } else switch == 0
      }
      var str = ""
      for (i <- 0 until numRows) str += resMap(i)
      str
    }
  }
}

在这里插入图片描述

另一种字符串拼接法

这个算法跑了几轮也没跑到时间 100%,就进去看了一下别人的 100% 解法,比我的快了 整整 100ms,所以研究后把这个方法解析在这里

这个方法的思路和我的算法思路基本相同,不同的是他应用了数组来进行存储,最后再把整个字符串放回去,这里就体现了对于语言的熟悉程度和水平了,这个层面上我自己是自视弗如,代码如下:

object Solution {
    def convert(s: String, numRows: Int): String = {
        if (numRows == 1 || numRows >= s.length) s
        else {
          var (row, step) = (0, 1)
          lazy val empStr: String = ""
          val arr: Array[String] = Array.fill[String](numRows)(empStr)
          for (c <- s) {
            arr(row) = arr(row) + c
            if (row == 0) step = 1
            else if (row == numRows - 1) step = -1
            row += step
          }
          arr.mkString(empStr)
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值