Skip to content

Latest commit

 

History

History
123 lines (92 loc) · 2.45 KB

6.Z 字形变换.md

File metadata and controls

123 lines (92 loc) · 2.45 KB

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

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

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

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

string convert(string s, int numRows);

 

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

示例 3:

输入:s = "A", numRows = 1
输出:"A"

 

提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',''.' 组成
  • 1 <= numRows <= 1000
标签: ['字符串']
难度:Medium 喜欢:1753

算法 1

(暴力枚举) $O(n^2)$

blablabla

时间复杂度

代码实现

var addTwoNumbers = function (l1, l2) {
  if (l1 == null && l2 == null) {
    return null;
  }
  var unitsDigit = addVal(l1, l2) % 10;
  var tensDigit = Math.floor(addVal(l1, l2) / 10);
  var header = new ListNode(unitsDigit);
  var tail = header;
  l1 = l1.next;
  l2 = l2.next;
  while (l1 !== null || l2 !== null || tensDigit > 0) {
    unitsDigit = (addVal(l1, l2) + tensDigit) % 10;
    var newNode = new ListNode(unitsDigit);
    tensDigit = Math.floor((addVal(l1, l2) + tensDigit) / 10);
    tail.next = newNode;
    tail = newNode;
    l1 = l1 ? l1.next : null;
    l2 = l2 ? l2.next : null;
  }
  return header;
};

function addVal(l1, l2) {
  var l1Val = 0,
    l2Val = 0;
  if (l1 !== null) {
    l1Val = l1.val;
  }
  if (l2 !== null) {
    l2Val = l2.val;
  }
  return l1Val + l2Val;
}

参考文献