LeetCode0003

  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
  • 示例 1:
  • 输入: "abcabcbb"
  • 输出: 3
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let maxLength = 0;
let tmp = [];
let count = 0;
for (let index = 0, lens = s.length; index < lens; index++) {
let dup = tmp.indexOf(s[index]);
if (dup > -1) {
if (count > maxLength) {
maxLength = count;
}
tmp.splice(0, dup + 1);
tmp.push(s[index]);
count = tmp.length;
}
else {
tmp.push(s[index]);
count++;
}
}
tmp = null;
return Math.max(maxLength, count);
};

LeetCode0009

  • 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。(进阶:不将整数转为字符串来解决这个问题。)
  • 输入: 121
  • 输出: true

思路一

/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
//最简单的就将x.toString().reverse() === x.toString()即可
//let str = x.toString();
//return str.split('').reverse().join('') === str;
//不用考虑溢出问题,因为如果是回文数肯定最后不会溢出,溢出就返回false即可
if (x < 0) return false;
if (x === 0) return true;
let y = x, remainder = 0, result = 0;
while (y > 0) {
remainder = y % 10;
result = result * 10 + remainder;
y = Math.floor(y / 10);
}
return result === x;
};

思路二(官方题解:只反转一半数字

  • 上面我们考虑到了反转全部数字,对于int要求严格的语言来说,很容易在计算上超过int.Max,那么你还要去处理溢出问题。
  • 那么能不能只反转一半数字呢?
  • 例如,输入1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。
  • 对于数字 1221,如果执行 1221 % 10,我们将得到最后一位数字 1,要得到倒数第二位数字,我们可以先通过除以 10 把最后一位数字从 1221 中移除,1221 / 10 = 122,再求出上一步结果除以 10 的余数,122 % 10 = 2,就可以得到倒数第二位数字。如果我们把最后一位数字乘以 10,再加上倒数第二位数字,1 * 10 + 2 = 12,就得到了我们想要的反转后的数字。如果继续这个过程,我们将得到更多位数的反转数字。
  • 现在的问题是,我们如何知道反转数字的位数已经达到原始数字位数的一半?
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function (x) {
if (x < 0) return false;
if (x === 0) return true;
if (x % 10 === 0) return false;
let result = 0;
//注意这个判断条件,我们上面判断的是大于0,也就是完全反转
//为什么这里x只要大于result就可以停下来了呢
//以x = 1221为例,第一步执行,result=1, x = 122
//第二步,result = 12, x=12
//可以看到这个时候result就已经等于x了,后面再执行也就是把x=0,result=1221而已
//考虑到上面是偶数的情况,我们以x=12321为例,第一步执行,result=1, x = 1232
//第二步,result = 12, x=123
//第三步,result = 123, x=12,此时跳出循环
//只要result/10 = 12等于x即可,中间的奇数位不需要跟其他数字做任何比较
while (x > result) {
result = result * 10 + x % 10;;
x = Math.floor(x / 10);
}
return result === x || Number.parseInt(result / 10) === x;
};

LeetCode Day 3的更多相关文章

  1. 我为什么要写LeetCode的博客?

    # 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...

  2. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  3. [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  4. Leetcode 笔记 113 - Path Sum II

    题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...

  5. Leetcode 笔记 112 - Path Sum

    题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...

  6. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  7. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  8. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  9. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  10. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

随机推荐

  1. c语言:自增自减运算符的操作详解

    博主在回忆c语言的基本知识时,突然发现自增自减运算符(--.++)这个知识点有些模糊不清,故博主为了给同为小白的同学们提供一些经验,特写下这篇文章. 首先,自增自减运算符共有两种操作方式. 比如,我先 ...

  2. Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。

    1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...

  3. 关于wireshark的使用

    1.简介 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直 ...

  4. 对接memcache经验分享

    接口访问日志  数据结构 分享 apiname 接口名称 apiname[cnt]接口访问次数每访问一次增加一次 这里要处理并发问题 我还没有解决: apiname[cnt][n][spent_tim ...

  5. FJ的字符串-简单递归

    FJ的字符串-简单递归 问题描述FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其 ...

  6. 修改自己的centos输入法

    当自己的centos连上网时,就可以修改自己的输入法了 http://jingyan.baidu.com/album/da1091fb3e7f8a027849d681.html?picindex=2

  7. VMware下的Ubuntu16设置连接主机网络,设置主机下可以通过xshell访问 VMware下的Ubuntu

    NAT模式连接 1. 2. 3. 4. 5. 6.

  8. UML-如何画SSD?

    1.SSD来自哪里?答:用例文本 2.如何为系统事件和操作命名? 3.SSD中的哪些需要放到词汇表中? SSD元素包含 1).操作名称 2).参数 3).返回数据 这些元素,必须要简洁.但别人可能不太 ...

  9. 关于JavaWeb中Servlet的总结

    Servlet知识结构图 Servlet是JavaWeb服务器端的程序,一般一个Servlet处理一种特定的请求.Servlet编写好后,需要指定其所处理的请求的请求路径,也可以认为Servlet是一 ...

  10. My97DatePicker日历插件

    My97DatePicker具有强大的日期功能,能限制日期范围,对于编写双日历比较简便. 注意事项: My97DatePicker目录是一个整体,不可以破坏 My97DatePicker.html 是 ...