算法

00


有5个人偷了一堆苹果,准备在第二天分赃。
晚上,有一人出来,把所有菜果分成5份,但是多了一个,他顺手把这个苹果扔给树上的猴,自己先拿1/5藏了起来。
结果其他四人也都是这么想的,都如第一个人一样把苹果分成5份,把多的那一个扔给了猴子,偷走了1/5。
第二天,大家分赃,也是分成5份多一个扔给猴子。最后一人分了一份。
问:共有多少苹果?
解:

  let peach = 5;
  while (1) {
    peach++;
    if (peach % 5 === 1) {
      let peach2 = peach - Math.floor(peach / 5) - 1;
      if (peach2 % 5 === 1) {
        let peach3 = peach2 - Math.floor(peach2 / 5) - 1;
        if (peach3 % 5 === 1) {
          let peach4 = peach3 - Math.floor(peach3 / 5) - 1;
          if (peach4 % 5 === 1) {
            let peach5 = peach4 - Math.floor(peach4 / 5) - 1;
            if (peach5 % 5 === 1) {
              let peach6 = peach5 - Math.floor(peach5 / 5) - 1;
              if (peach6 % 5 === 1) {
                console.log(peach);
                break;
              }
            }
          }
        }
      }
    }
  }

01-LeetCode-两数之和(*)


给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解:

  var twoSum = function (nums, target) {
    //将出现过的数字的索引进行,保存到1个对象上
    let prevNums = {};
    for (let i = 0; i < nums.length; i++) {
      const curNum = nums[i];
      const targetNum = target - curMum;
      //从prevNums中看是否能够衮取到targetMum的索引值
      const targetNumIndex = prevums[targetNum];
      if (targetNumIndex === undefined) {
        prevNums[curNum] = i; //如果判断当前没有目标值对应数的索引,那么将数据存放到prevWums
      } else {
        return [targetMumIndex, i];
      }
    }
  };
var twoSum = function(nums, target) {
    const map = new Map();
    for(let i = 0; i < nums.length; i++){
        const temp = target - nums[i]
        if (map.has(temp)){
            return [map.get(temp),i]
        } else {
            map.set(nums[i], i)
        }
    }
    return []
};

02-leetCode-两数相加(**)(+)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解:

var addTwoNumbers = function(l1, l2) {
    //创建1个新的链表,这个链表即为返回的链表
    let node = new ListNode("head");
    //作为每次相加的临时节点;
    let temp = node;
    //使用1个变量判断是否进1
    let add = 0;
    //每次相加的值
    let sum = 0;
    //判断每次相加的节点是否还有,作为继续循环的判断
    while (l1 || l2) {
        sum = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + add;
        temp.next = new ListNode(sum % 10);
        temp = temp.next;
        add = sum >= 10 ? 1 : 0;
        l1 && (l1 = l1.next);
        l2 && (l2 = l2.next);
    }
    add && (temp.next = new ListNode(add));
    return node.next;
};

07-LeetCode-整数反转


给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例1

输入: 123
输出: 321

示例2

输入: -123
输出: -321

示例3
输入: 120
输出: 21
注意
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

var reverse = function (x) {
  // 取绝对值
  // 转成字符串
  // 转成数组
  // 翻转数组
  // 合并数组的字符串
  //  字符串转换成整数
  const res = parseInt(
    Array.from(Math.abs(x) + "")
      .reverse()
      .join("")
  );
  if (-res < -(2 ** 31) || res > 2 ** 31 - 1) {
    return 0;
  }
  return x < 0 ? -res : res;
};

08-LeetCode-字符串转换整数(atoi)


请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:

如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0 。

提示:

本题中的空白字符只包括空格字符 ' ' 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例1

输入: "42"
输出: 42

示例2

输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
     我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例3

输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

示例4

输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
     因此无法执行有效的转换。

示例5

输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 
     因此返回 INT_MIN (−231) 。

解:

var myAtoi = function (str) {
  let res = str.trim().match(/^(\-|\+)?\d+/g);
  return res
    ? Math.max(Math.min(Number(res[0]), 2 ** 31 - 1), -(2 ** 31))
    : 0;
};

09-LeetCode-回文数


判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例1

输入: 121
输出: true

示例2

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例3

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

解:

var isPalindrome = function(x) {
   return x === Number(x.toString().split("").reverse().join(""));  
};

179-LeetCode-最大数


给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:

输入:nums = [10,2]
输出:"210"

示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"

示例 3:

输入:nums = [1]
输出:"1"

示例 4:

输入:nums = [10]
输出:"10"

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 109

解:

var largestNumber = function (nums) {
    nums.sort((a, b) => b + "" + a - (a + "" + b));
    return nums[0] === 0 ? "0" : nums.join("");
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352