乘风破浪:LeetCode真题_040_Combination Sum II 一.前言 这次和上次的区别是元素不能重复使用了,这也简单,每一次去掉使用过的元素即可. 二.Combination Sum II 2.1 问题 2.2 分析与解决 通过分析我们可以知道使用递归就可以解决问题,并且这次我们从头遍历一次就不会出现多次使用某一个元素了. class Solution { List<List<Integer>> ans; public List<List<Intege…
乘风破浪:LeetCode真题_039_Combination Sum 一.前言     这一道题又是集合上面的问题,可以重复使用数字,来求得几个数之和等于目标. 二.Combination Sum 2.1 问题 2.2 分析与解决 我们可以先将大于该数字的元素去除掉,之后取出一个元素,做减法,将得到的结果再放到集合中比较,直至最后减得结果为零则成功,为负数则失败回退.因此我们可以使用递归.堆栈.队列等来解决. public class Solution { public List<List<…
这是悦乐书的第179次更新,第181篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第38题(顺位题号是167).给定已按升序排序的整数数组,找到两个数字,使它们相加到特定的目标数.函数twoSum应该返回两个数字的索引,使它们加起来到目标,其中index1必须小于index2. 注意: 返回的答案(index1和index2)不是从零开始的. 可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 例如: 输入:数字= [2,7,11,15],目标=…
乘风破浪:LeetCode真题_018_4Sum 一.前言 前面我们已经练习过了三个数相加的集合运算,现在变成了四个数,其实道理是一样的.三个数的时候可以转成两个数的加法,最后来解决,而四个数的可以转换成三个数的加法,最终变成两个数的加法运算. 二.4Sum 2.1 问题 2.2 分析与解决     根据我们之前的经验,可以很自然地想到变成三个数相加来计算,不过因为是四个数相加,因此需要至少3个循环了,这样时间复杂度就是O(n~3).下面是这种解法. class Solution { publi…
乘风破浪:LeetCode真题_016_3Sum Closest 一.前言      这一次,问题又升级了,寻找的是三个数之和最靠近的某个数,这是非常让人难以思考的,需要把三个数相加之后和最后给的目标进行比较,看看接近的程度,选择最接近的.不一定是等于目标.那么我们又该怎么做呢?? 二.3Sum Closest 2.1 问题 2.2 分析与解决 由上面的题意我们可以知道上一次的3sum所用的算法这边可能用不上了,需要进行改进.比如我们可以设想一个变量使得a+b+c≠target,但是a+b+c+…
乘风破浪:LeetCode真题_015_3Sum 一.前言 关于集合的操作,也是编程最容易考试的问题,比如求集和中的3个元素使得它们的和为0,并且要求不重复出现,这样的问题该怎么样解决呢? 二.3Sum 2.1 问题 2.2 分析与解决     遇到这样的问题,我们更应该仔细想想如果使用暴力法的时间效率,可以发现是O(n~3)的时间复杂度,并且会出现重复过的,需要去除重复,这是非常让人难以忍受的,并且我们知道随着集合的增大,这样的代价非常的大.那么我们如何进行优化呢,这里就要仔细的想想如果我们在…
乘风破浪:LeetCode真题_013_Roman to Integer 一.前言 上一节我们讨论了如何把阿拉伯数字转换成罗马数字,现在我们需要思考一下如何把罗马数字转换成阿拉伯数字,其实我们仔细观擦这些结构就会发现罗马数字如果前面的比后面的小,就需要用后面的减去前面的.而且如果有这样的运算,也只是两个字符拼接而成的,这为我们解题提供了思路. 二.Roman to Integer 2.1 问题 2.2 分析与解决 根据题意,我们可以明白只需要从开始到结尾遍历这些罗马数字,如果发现前一个小于后一个…
乘风破浪:LeetCode真题_012_Integer to Roman 一.前言 经过了前面的思维训练,我们在某些方面有了一定的提高,但是对于实际的问题,要在短时间内得到答案,还是需要我们多多的练习和思考,从而提升自己的质疑能力,思考能力和编程能力. 二.Integer to Roman 2.1 问题理解 2.2 问题分析和解决 通过分析我们可以知道,这是单位的换算问题,因此我们需要定义好相应的单位,然后通过取余运算,取整运算不断地进行下去,从而得到对应的单位,然后进行组合.因为有值域限制,我…
乘风破浪:LeetCode真题_002_Add Two Numbers 一.前言     这次的题目是关于链表方面的题目,把两个链表对应节点相加,还要保证进位,每个节点都必须是十进制的0~9.因此主要涉及到链表,指针方面的知识,以及活学活用的编程能力. 二.LeetCode真题_002_Add Two Numbers 2.1 问题介绍 2.2 分析与解决 看到这样的问题,我们首先要分析清题意,之后画出一个原理图,然后就便于解决了.可以看到主要是包括了进位的问题,因此我们每一次相加的时候需要考虑到…
乘风破浪:LeetCode真题_001_TwoSum 一.前言 沉寂了很长时间,也悟出了很多的道理,写作是一种业余的爱好,是一种自己以后学习的工具,是对自己过往的经验积累的佐证,是检验自己理解深入度的方法.在前面的模块之中,我们已经将基本的编程知识.数据结构.设计模式.应用框架.各种优化烂熟于心了,对程序开发有了一定的理解,但是编程的功力是一种水磨的功夫,需要问题,也需要思考,最重要的是需要自己用心的去打出代码,在这个过程中经验.技巧.熟练度.思考力都是非常重要的,因此我们通过LeetCode上…