简单题
A + B 问题
给出两个整数,求和(用位运算)
1 | class Solution: |
尾部的零
计算出n阶乘中尾部零的个数
1
2
3
4
5
6
7
8
9
10
11
12
13
14 > 样例 1:
> 输入: 11
> 输出: 2
>
> 样例解释:
> 11! = 39916800, 结尾的0有2个。
>
> 样例 2:
> 输入: 5
> 输出: 1
>
> 样例解释:
> 5! = 120, 结尾的0有1个。
>
1 | class Solution: |
合并排序数组 II
合并两个有序升序的整数数组A和B变成一个新的数组。新数组也要有序。
1
2
3
4 > 输入: A=[1], B=[1]
> 输出:[1,1]
> 样例解释: 返回合并后的数组。
>
1
2
3
4 > 输入: A=[1,2,3,4], B=[2,4,5,6]
> 输出: [1,2,2,3,4,4,5,6]
> 样例解释: 返回合并后的数组。
>
1 | # 方法A |
旋转字符串
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量
原地
旋转字符串(从左向右旋转)。
1 | 输入: str="abcdefg", offset = 3 |
1 | 输入: str="abcdefg", offset = 0 |
1 | class Solution: |
字符串查找
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回
-1
。
1 | 输入: source = "source" , target = "target" |
1 | 输入: source = "abcdabcdefg" ,target = "bcd" |
1 | class Solution: |
二分查找
给定一个排序的整数数组(升序)和一个要查找的整数
target
,用O(logn)
的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1
。
1 | 样例 1: |
1 | class Solution: |
列表扁平化
1 | 样例 1: |
1 | class Solution(object): |
搜索二维矩阵
1 | 样例 1: |
1 | class Solution: |
反转链表
1 | 输入: 1->2->3->null |
1 | """ |
反转一个3位整数
反转一个只有3位数的整数。
你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。
1 | 输入: number = 123 |
1 | 输入: number = 900 |
1 | class Solution: |
恢复旋转排序数组
说明
什么是旋转数组?
- 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
样例
Example1:[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
Example2:[6,8,9,1,2]
-> [1,2,6,8,9]
1 | class Solution: |
最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
1 | 输入:[−2,2,−3,4,−1,2,1,−5,3] |
1 | 输入:[1,2,3,4] |
1 | class Solution: |
主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
1 | 输入: [1, 1, 1, 1, 2, 2, 2] |
1 | class Solution: |
数组剔除元素后的乘积
描述
给定一个整数数组A。
定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
, 计算B的时候请不要使用除法。请输出B。
1 | 输入: A = [1, 2, 3] |
1 | 输入: A = [2, 4, 6] |
1 | class Solution: |
翻转字符串中的单词
说明
- 单词的构成:无空格字母构成一个单词,有些单词末尾会带有标点符号
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
1 | 样例 1: |
1 | class Solution: |
比较字符串
样例
给出 A = "ABCD"
B = "ACD"
,返回 true
给出 A = "ABCD"
B = "AABC"
, 返回 false
1 | class Solution: |
两数之和
描述
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum
需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
样例
1 | Example1: |
1 | class Solution: |
搜索插入位置
描述
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
样例
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6],0 → 0
1 | class Solution: |
二叉树的前中后序遍历
样例 1:
1 | 输入:{1,2,3} |
样例 2:
1 | 输入:{1,#,2,3} |
1 | """ |
二叉树的层次遍历
1 | """ |
落单的数
描述
给出 2 * n + 1
个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
样例 1:
1 | 输入:[1,1,2,2,3,4,4] |
样例 2:
1 | 输入:[0,0,1] |
1 | class Solution: |
平衡二叉树
描述
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例
1 | 样例 1: |
1 | """ |
二叉树的最大深度
描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。
样例 1:
1 | 输入: tree = {} |
样例 2:
1 | 输入: tree = {1,2,3,#,#,4,5} |
1 | """ |
最小路径和
描述
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
样例
1 | 样例 1: |
1 | class Solution: |
爬楼梯
描述
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例
1 | Example 1: |
1 | class Solution: |
删除排序链表中的重复元素
描述
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例
1 | 样例 1: |
1 | """ |
不同的路径
描述
有一个机器人的位于一个 m × n 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
样例
Example 1:
1 | Input: n = 1, m = 3 |
Example 2:
1 | Input: n = 3, m = 3 |
1 | class Solution: |
不同的路径 II
描述
“不同的路径“ 的跟进问题:
现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用 1 和 0 来表示。
1 | class Solution: |
二叉树的最小深度
描述
给定一个二叉树,找出其最小深度。
二叉树的最小深度为根节点到最近叶子节点的最短路径上的节点数量。
样例 1:
1 | 输入: {} |
样例 2:
1 | 输入: {1,#,2,3} |
样例 3:
1 | 输入: {1,2,3,#,#,4,5} |
1 | """ |
合并两个排序链表
样例
1 | 样例 1: |
1 | """ |
链表求和
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中
相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例 1:
1 | 输入: 7->1->6->null, 5->9->2->null |
样例 2:
1 | 输入: 3->1->5->null, 5->9->2->null |
1 | """ |
删除链表中倒数第n个节点
样例
1 | Example 1: |
1 | """ |
字符串置换
给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
样例
1 | Example 1: |
1 | class Solution: |
二叉树的路径和
描述
给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值
的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
样例1:
1 | 输入: |
样例2:
1 | 输入: |
1 | """ |
最长上升连续子序列
描述
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
样例 1:
1 | 输入:[5, 4, 2, 1, 3] |
样例 2:
1 | 输入:[5, 1, 2, 3, 4] |
1 | class Solution: |
有效的括号序列
描述
给定一个字符串所表示的括号序列,包含以下字符: '(', ')'
, '{'
, '}'
, '['
and ']'
, 判定是否是有效的括号序列。
样例 1:
1 | 输入:"([)]" |
样例 2:
1 | 输入:"()[]{}" |
1 | class Solution: |
二叉树的所有路径
描述
给一棵二叉树,找出从根节点到叶子节点的所有路径。
样例 1:
1 | 输入:{1,2,3,#,5} |
样例 2:
1 | 输入:{1,2} |
1 | """ |
栅栏染色
我们有一个栅栏,它有n
个柱子,现在要给柱子染色,有k
种颜色可以染。
必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。
1 | class Solution: |