Leetcode01 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目
标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用
两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
暴力解法:将数组遍历两次,找到适合题目的解。虽然简单,但是时间复杂度高。
大神解法:利用Java集合中的Map类,遍历一次数组,key值为数组中的值,value即为target减去key的值。若存在有元素的value与另一个元素的key值相等,则这两个元素满足题目条件。
Leetcode02 两数相加
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照
逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解法:先设置一个链表引用pre,作为答案链表的头指针,在设置cur作为遍历答案链表所用的指针,还需要设计一个变量carry作为进位。同时遍历两个非空链表,若两个链表一长一短,则在短的链表后面继续接上数据域为0的节点。答案链表的节点的数据域的值需要经过处理。
data = (l1.data+l2.data+carry)%10;
carry = l1.data+l2.data+carry;
当l1,l2遍历完之后,若carry的值为1,则还需要新建一个data为1的节点插入到答案链表的后面。
Leetcode242 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
题解:利用Java中的String类中toCharArray把字符串变成字符数组,然后利用Arrays.sort方法将两个字符数组内的字母排序,如果此时两个数组相同,则证明两个字符串是字母异位词。
剑指offer58-Ⅱ 左旋转字符
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"
和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
题解:利用String类中的substring方法即可简单解决。substring方法根据参数返回字符串的子串。substring(int beginIndex)返回由beginIndex开始到字符串尾端的子串。substring(int beginIndex,int endIndex)返回由beginIndex到endIndex的子串。