30天刷题挑战(二十八)
题目来源: 面试经典 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