JAVA leetcode 练习(Easy)

突然想学 java

第一天  10.5

两数之和

要求

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个
整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9//所以返回 [0, 1]

解题思路

从两个 循环, 第一个找基础值, 第二个找后面的值
判断两数相加是否等于 目标值

解题脚本

整数反转

要求

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路

以为有 正负 判断但是 反转不会改变 符号
所以我们可以 先去掉符号进行(对绝对值反转)
反转:

  1. 可以对正数 取余(对10) 然后对余数 * 10 在加 下一个余数
  2. 返回是 判断 正负 加上 正负号

解题代码

Match.abs 取绝对值

回文数

要求

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

解题思路

  1. 首先如果是 负数 或者 个位为0的不为0数 直接返回 false
  2. 用中间数保存 这给数的 反转数,我们只用比较到 一半的位置就好了

解题代码

罗马数字转整数

// 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做
IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4
。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
// 字符          数值
//I             1
//V             5
//X             10
//L             50
//C             100
//D             500
//M             1000

解题思路

  1. 循环switch 判断
  2. 如果 当前 字符对应的 值小于后面的 要-当前数+后面的数

解题脚本

最长公共前缀

要求

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""

解题思路

用第一个 字符串第一位 和后面的每位 进行比较

解题脚本


第二天   10.6

有效的括号

要求

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。

解题思路

  1. 相邻括如果不是 前括号 ,要是等于 上一个括号对应的 后括号则成立
  2. s的长度必须要 不为0且,不为奇数

学习思路

学习利用 stack 的知识 (后进先出),因为 合适的 括号 是相应的

Stack<类型> 名字 = new Stack<> 定义stack

解题脚本

我们 判断后 还要看 stack 里面是否没有字符了 从而判断是否成功

合并两个有序链表

要求

解题思路

单个匹配找到对应的 链表值
将对应的 加入next 在移到下一位
有个保存头指针
判断 链表 是否为空

解题脚本


删除排序数组中的重复项

要求

解题思路

我们可以 新的 数组就保存在给的 数组中
判断 当保存当前数组的 遍历数 如果大于当前的 将这给值保存在当前的下一个位置
返回新的长度位 当前下标 +1

解题脚本

移除元素

要求

解题思路

就和上一题差不多的思路
只要 不相同就保存
返回当前 长度

解题脚本


第三天   10.7

实现 strStr()

要求

思路

  1. needle=0 返回 0
  2. needle长度 大于 haystack 返回 -1
  3. 循环比较用一个 计数位保存 开始值

解题脚本

搜索插入位置

要求

思路

  1. 就判断目标的大小值和数组中的值

解题脚本

报数

要求

思路

  1. 第一想到的是递归

StringBuffer 可以对字符进行修改,用于保存
toCharArray 转化为 数组 方便计数
toString 转化为 字符串 用于显示

解题脚本

最大子序和

要求

思路

遍历 比较 存储最大值

解题脚本

最后一个单词的长度

要求

思路

从末尾开始 判断
为空返回 0
最后一个为‘ ’ 返回 0
如果是数字开始计算,遇到' ' 后停止计数

解题脚本


第四天   10.8

加一

要求

思路

从最后一位 开始,先加1 如果存在进位这个 位置表示0 。
用一个标志位表示 。
没有进位就前面的都不变
如果是 下标 为 0 的数组单元存在 进位 用新的 数组(长度为上一个加一)最高位保存 为1 后面的保存为 0

解题脚本

二进制求和

要求

思路

就数据相加的 思想

  1. 从末尾相加如果 相加后 等于二 用一个表示进位
  2. 下标不能 小于0
  3. 最后还要验证 如果最高位还 存在进位 就还要插入一个值

解题脚本

x 的平方根

要求

思路

  1. 求一个 x 的平方根,这个平方根 绝对是小于等于 x/2 的。
  2. 可以利用二分法 从最高和最低开始进行匹配

脚本


第五天   10.9

爬楼梯

要求

思路

  • 只要我们的所有相加为 n 就是一种方法
  • (肥波希腊数列)n-1的数列 + n-2的数列
  • 从最上玩下走可以走一步 也可以走两步
  • 当 0 1 时 只能由 1 种走法 从第二个开始每个 有 2种方法

解题脚本

删除排序链表种的重复元素

要求

思路

  • 匹配后面的数 与当前的数相同 继续向下匹配 当不同就 让前一个保存不同的指针
  • 先判断师傅链表 没有或只有一个数据(如果是直接返回)
  • 然后判断链表是否的重复

解题脚本

合并两个有序数组

要求

思路

比较加道数组中

脚本


第六天   10.23

相同的树

要求

思路

当前比较 利用 递归 分别判断

脚本

对称的数

要求

思路

和上一个方法类似
但是要交换 左右值的 判断

脚本

二叉树的最大深度

要求

思路

为 null 直接返回 0
然后 利用递归 去找到最大
没进一层 次数 +1 判断左右的最大最小 进行比较 选最大的 保存下来返回

解题脚本

二叉树的层次遍历Ⅱ

要求

思路

本题我是利用BFS遍历来实现,按层将节点不断压入队列,因为同一层的节点是在一个vector中的。所以还需要记录节点所在层数。这里恰好可以利用“当前层的节点个数为队列中元素个数”这个性质。

解题脚本

返回多个 list

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注