LeetCode 35 38 53 58 66

发表信息: by

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 '这种