二叉搜索树中第K小的元素+整数反转

2020-04-24  本文已影响0人  砂壶

230. 二叉搜索树中第K小的元素

思路

  1. 将二叉树存为数组,通过前序遍历存为从小到大的有序数组
    2.需要第几大的元素直接从排好序的数组中取
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(root, k) {
    let arr = [];
    getArr(root, arr);
    return arr[k-1];
};

function getArr(root, arr) {
    if(root === null) return;
    getArr(root.left, arr);
    arr.push(root.val);
    getArr(root.right, arr);
}

整数反转

7. 整数反转
第一次解

  1. 从低位到高位放到栈中
    3.从栈中取数,每次取都前一个*10再加当前的数,要判断是否溢出。
/**
 * @param {number} x
 * @return {number}
 */
const max = Math.pow(2, 31) - 1;
const min = -Math.pow(2, 31);
var reverse = function(x) {
    let stack = [];
    while(x) {
        let pop = x%10;
        stack.push(pop);
        x = parseInt(x/10);
    }
    let len = stack.length;
    let res = 0;
    for(let i = 0; i < len; i++) {
        if(res > 0 && res > parseInt((max-stack[i])/10)) return 0;
        if(res < 0  && res < parseInt((min-stack[i])/10)) return 0;
        res = res*10+stack[i];
    }
    return res;
};

第二次解:
不添加使用栈,而是直接将数据存进来

/**
 * @param {number} x
 * @return {number}
 */
const max = Math.pow(2, 31) - 1;
const min = -Math.pow(2, 31);
var reverse = function(x) {
    let res = 0;
    while(x) {
        let pop = x%10;
        x = parseInt(x/10);
        if(res > 0 && res > parseInt((max-pop)/10)) return 0;
        if(res < 0  && res < parseInt((min-pop)/10)) return 0;
        res = res*10+pop;
    }
    return res;
};
上一篇下一篇

猜你喜欢

热点阅读