LeetCode 35 38 53 58 66
35 Search Insert Position
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
if (nums == null) {
return 0
}
let result = 0
for (let i = 0; i < nums.length; i++) {
if (target === nums[i] || target < nums[i]) {
result = i
break
}
if (i === nums.length - 1) {
result = nums.length
break
}
}
return result
};
这个题就非常简单了, 看代码就是了, 看看大神的代码, 只不过是上面的简化版本
var searchInsert = function(nums, target) {
for (let i = 0; i < nums.length; i++){
if (nums[i] == target || nums[i] > target){
return i;
}
}
return nums.length;
};
38 Count and Say
/**
* @param {number} n
* @return {string}
*/
var say = function(numS) {
let count = 1
let nowNumber = numS[0]
let r = ""
for(let i = 1; i < numS.length; i++) {
if(nowNumber === numS[i]) {
count += 1
} else {
r += count + "" + nowNumber
count = 1
nowNumber = numS[i]
}
}
r += count + "" + nowNumber
return r
}
var countAndSay = function(n) {
if (n === 1) {
return "1"
} else {
return say(countAndSay(n-1))
}
};
这个题难就难在题意上, 我看了几遍也没有看懂, 在网上找的中文讲解:
n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。
这里题目其实没有表述清楚, 没有说明参数n有多大, 这个关系到需不需要用递归处理
53 Maximum Subarray
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let sum = nums[0]
let temp = nums[0]
for(let i = 1; i < nums.length; i++) {
if (temp + nums[i] < nums[i]) {
temp = nums[i]
} else {
temp = temp + nums[i]
}
if (temp > sum) {
sum = temp
}
}
return sum
};
这个得益于我曾经见过这种题, 用两个变量来表示, temp主要是用来做预判的,sum主要是存遍历当前的最大值。
58 Length of Last Word
func lengthOfLastWord(s string) int {
ss := strings.Split(strings.Trim(s, " "), " ")
return len(ss[len(ss)-1])
}
注意'a'和 'a '这种