likes
comments
collection
share

30天刷题挑战(二十八)

作者站长头像
站长
· 阅读数 29

题目来源: 面试经典 150 题

12. 整数转罗马数字

思路

贪心算法,每次用 num 减去数组中的值,罗马数值加上对应值,继续对原数字进行减法。

代码

/**
 * @param {number} num
 * @return {string}
 */
var intToRoman = function(num) {
  let nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
  let romas = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]

  let str = ""
  let index = 0

  while (index < 13) {
    
    while (num >= nums[index]) {
      str += romas[index]
      num -= nums[index]
    }
    index++
  }
  
  return str
};

58. 最后一个单词的长度

思路

将数组分割之后,返回最后一个单词的长度即可

代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
 let arr = s.trim().split(" ")
 let last = arr[arr.length - 1]

 return last.length
};

6. N 字形变换

思路

遍历字符串,向下向右进行遍历,dwon 控制向下或者向右,最后返回数组 join 后的字符串。

代码

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
  if (numRows < 2) {
    return s
  }

  const len = Math.min(s.length, numRows)
  const rows = Array(len).fill("")
 
  let loc = 0
  let down = false

  for (let c of s) {
    rows[loc] += c

    if (loc === 0 || loc === numRows - 1) {
      down = !down
    }
    loc += down ? 1 : -1
  } 
  
  return rows.join("")
};

本文完,感谢阅读。

转载自:https://juejin.cn/post/7294171458032107530
评论
请登录