![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode刷题总结
刷题总结
Lesliecc96
这个作者很懒,什么都没留下…
展开
-
剑指offer笔记——20. 表示数值的字符串(考虑特殊情况即可)
原题思路既然来判断,字符串是否表示数值,将字符串转成字符数组,那么便将几种特殊情况判断一下就知道了。设置几个标签,来判断情况,初始值都为falsenum:是否出现0-9dot:是否出现小数点eE:是否出现e,E正常情况是数字,0-9若是小数点小数点之前不能有小数点和E,e符号,否则返回falsee,Ee,E之前不能出现e,E,前面必须有数字出现,否则返回false,并且出现e,E之后,需要重置数字位num。+号,-号加减号只能在第一位出现,或者出现在e,E之后,否则返回fals原创 2020-08-13 20:42:54 · 117 阅读 · 0 评论 -
剑指offer笔记——打印从1到最大的n位数(大数越界)
原题思路返回一个整数列表的话,数字不超过int32整型取值范围内,不需要考虑大数越界的问题,只需要考虑伟大的n位数与位数n的关系所以简单的思路便是得到最大的n位数后,从1循环遍历到end,将其放入到数组中即可。BUT!面试题没有这么简单,真正的面试题的考点在于“大数越界”!!!大数越界需要考虑的点有2个表示大数的变量的类型不管是int/short/long,这三种变量类型,数组的取值范围都是有限的,所以不能采用这三种,需要采用字符串String类型来进行表示生成数字的字符串集生成的原创 2020-07-28 11:45:52 · 264 阅读 · 0 评论 -
剑指offer刷题笔记—— 二进制中1的个数(巧用&,简单好用一生推!)
二进制中1的个数原题:思路之前想的是个笨办法,怎么把数字转化成二进制的形式,然后再统计1个个数。后来发现,要巧用 “&”, 无需转换成二进制!!!方法1 按位循环&有一个性质,整数n&1的结果0,n最右边的一位是01,n最右边的一位是1&操作完,n右移1位,循环此操作,直至n为0.话不多说,上代码public class Solution { // you need to treat n as an unsigned value原创 2020-07-27 20:03:03 · 102 阅读 · 0 评论 -
剑指offer笔记——剪绳子(Ⅰ,Ⅱ)
剪绳子Ⅰ原题:思路:本题算法思想跟代码不是大问题,主要是数学推导。通过劈里啪啦一通推导(看不看的,知道结论就完事儿了 ),结论是绳子以长度为3时等分效果为好,乘积最大。其实问题变转化为,数字n,怎样除以3,使得各个商的乘积最大。当n<=3时,没有什么规律可言,最大商就是n-1(自己品品,你品!)当n>3时,n=3*a+bb的结果,无非有三种,0,1,2好了,破案!!!!!!!!!!!!!上代码:class Solution { public int cut原创 2020-07-27 11:23:36 · 97 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(队列/栈)
1.打开转盘锁原题思路:状态位一共有4位,前后都可进一步,所以从一个状态到下一个状态有8种可能。在这个基础上,采用广度优先的思想来解题。需要的数据结构是队列,并且还需要一个哈希集合来判断状态是否已经尝试。并且用nll放入队列来隔开每一层的遍历。所以,当取出队列中的第一个节点是,先判断是否位null,如果是,则说明进入下一层,即步数加一,并且判断队列中第一个元素是否是null,如果是的话,在...原创 2020-07-18 20:30:39 · 146 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希键值)
字母异位词分组原题思路1:排序这里需要看每个字符串的本质,将每个字符串转化成字符数组之后,排序,然后便能得到基础顺序,用这个基础顺序为键值,便能循环判断并将字符串分类上代码:class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs.length==0) return new ArrayList<>();原创 2020-07-15 22:05:08 · 265 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希映射)
1. 同构字符串原题:思路1:可以用哈希映射来做。将字符串s和t同时对比,假设当前遇到的字符分别是c1和c2,看一下哈希映射里面是否有c1,如果有,则看一下c1和c2是否相对应,如果不对应,则返回false。如果哈希映射里面没有c1,则将(c1,c2)加到哈希映射中。注意:对于这道题,我们只需要验证 s - > t 和 t -> s 两个方向即可。如果验证一个方向,是不可以的。举个例子,s = ab, t = cc,如果单看 s -> t ,那么 a -> c, b原创 2020-07-14 22:00:38 · 158 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希集合)
1. 两个数组的交集原题:思路: 讲数组准换成哈希集合,使用两个哈希集合来做。定义一个函数来判断两个哈希集合的交集,此处注意,函数的返回值不能单纯的返回交集数组,因为刚开始定义数组的时候并不知道交集的长度,所以数组的长度并不是交集的长度,返回的时候使用Arrays.copyOf()函数处理一下数组,便能直接返回具体的交集。上代码:class Solution { public int[] section(HashSet<Integer> s1, HashSet<Int原创 2020-07-14 16:21:57 · 353 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表)
设计哈希表原题:思路: 采用双端链表作为哈希表的基础数据结构,来实现哈希表的增删查询。关键点有两个:一个是哈希函数的确定,这里考虑质数,最大程度地避免哈希冲突。确定好哈希函数之后,后续增删查的函数,便是做完哈希之后再进行。确定一个基础地数据结构。这里选择双向链表。需要注意,在进行增加操作的时候,需要查询增加的元素是否存在,因为哈希表不存储重复值。...原创 2020-07-12 16:08:23 · 266 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(数组相关:反转字符串中的单词)StringBuffer+StringBuilder
反转字符串中的单词 III原题:思路:方法一:直接调用string的相关函数来解决问题split():以“ ”将字符串进行分割,切割成以单词为单位的字符串数组reverse():StringBuffer的一个函数,进行字符串的反转trim():该方法会从一个字符串的两端删除空白字符。话不多说上代码:class Solution { public String reverseWords(String s) { String word[]=s.split(" ");原创 2020-07-06 21:18:01 · 196 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(数组相关:杨辉三角)
杨辉三角原题:思路: 动态规划。这个需要注意的时杨辉三角时从0开始的。然后再控制循环变量的时候,变量的边界值,取值需要思考。用代码来解释:第一次错误示范:class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> dp=new ArrayList<>(); if(numRows==0)原创 2020-07-06 11:59:49 · 304 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(双指针/快慢指针)
1.两数之和 II - 输入有序数组原题:思路:最开始的思路不是双指针,简单的想两轮循环判断和。class Solution { public int[] twoSum(int[] numbers, int target) { for(int i=0;i<numbers.length;i++){ for(int j=i+1;j<numbers.length;j++){ if(numbers[i]+numbe原创 2020-06-29 21:37:13 · 7845 阅读 · 0 评论 -
leetcode刷题笔记——数据结构(字符串)
1.最长公共子前缀思路: 这个题思路是比较好想的。先检查数组是否为空,为空则直接返回“”。然后拿第一个字符串跟后面的字符串进行比较,若存在公共子前缀则用它更新,作为比较的字符串进行后续的比较。最后判断一下得到的公共子前缀是否为空。这里需要用到关于字符串的函数:①charAt(int index):返回指定位置的字符。第一个字符位置为 0, 第二个字符位置为 1,以此类推.②返回字符串的子字符串substring(int beginIndex)substring(int beginIndex,原创 2020-06-16 20:44:22 · 221 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(数组)
1.数组1.1 寻找数组的中心索引思路:初步:拿到题的第一想法是嵌套循环,一个大循环里,两个小循环求和。但是在设置判断条件的时候为了判断左右两边和相等,且排除两边和为初始值0;一般情况下是可以的,但是两边(正负相加)和如果为0的话,就无法判断了。代码如下(错误示范):public static int centerindex(int a[]) { int count=0; for (int i=0;i<a.length;i++) { int lsum,rsum; lsu原创 2020-05-28 22:42:34 · 239 阅读 · 0 评论