- 博客(310)
- 资源 (4)
- 收藏
- 关注
原创 LeetCode-90-Subsets II(回溯)-Medium
题意理解:同题78,但所给数列中可能存在重复元素;题目分析:1. 解题思路同题78;2. 在同级遍历中,如果发现当前元素在之前已出现,则跳过;解题代码:public class Solution { private ArrayList> ans= new ArrayList>(); private boolean find(int[
2016-03-26 22:45:08
817
原创 LeetCode-89-Gray Code(模拟/递归)-Medium
题意理解:1. 列举出n位的所有格雷码;2. 列举顺序必须按照示例中的顺序;题目分析:1. 找规律:1)1位的格雷码为012)n位的格雷码为n-1位格雷码的集合Set1,加上n-1位格雷码的集合最左侧添加一个1 Set2,其中,Set2中的元素为Set1中元素的从后向前的遍历结果,如000001---------011010-----
2016-03-26 12:24:16
749
原创 LeetCode-88-Merge Sorted Array(归并)-Easy
题意理解:合并两个已排序数组;题目分析:1. 典型合并算法;2. 注意当某一数元素在新的排列中已排列完的边界情况处理;解题代码:public class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int len=m+n;
2016-03-24 09:07:48
648
原创 LeetCode-86-Partition List(链表)-Medium
题意理解:对应给定链表list,和数值val,将先前链表内容重排序,结果使得,小于val的值在左边,大于等于val的值在右边;题目分析:使用两组指针,分别标示小于val的链表,和大于等于val的链表,然后将两个链表合并;解题代码:/** * Definition for singly-linked list. * public class ListNode
2016-03-23 09:13:44
564
原创 LeetCode-82-Remove Duplicates from Sorted List II(链表)-Medium
题意理解:删除链表中所有连续重复的项(当前元素和被重复元素一删除);题目分析:1. 使用双指针,其中,一个指针标示前面未发生重复的元素位置,一个指针标示当前位置,然后,从左向右处理;2. 注意第一个指针的状态改变判定;解题代码:/** * Definition for singly-linked list. * public class ListNode
2016-03-22 08:58:42
872
原创 LeetCode-83-Remove Duplicates from Sorted List(链表)-Medium
题意理解:删除链表中的重复项;题目分析:使用双指针分别记录当前位置和先前位置,然后比较当前值是否与先前值重复,进而进行删除重复项操作;解题代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *
2016-03-21 08:33:33
424
原创 LeetCode-80-Remove Duplicates from Sorted Array II(递归)-Medium
题意理解:题意同26题,只是运行可以有两个相同的元素;题目分析:递归处理;解题代码:public class Solution { private static final int MAX_TIMES=2; private void erase(int[] nums, int pos, int size){ for(in
2016-03-20 15:57:53
342
原创 LeetCode-79-Word Search(回溯法)-Medium
题意理解:求解给定字符串str,是否在字符矩阵array中。要求str中相邻的两个字符,在array中也是相邻字符,并且要求,array中的同一字符,不能使用两次;题目分析:1. 使用回溯法;2. 注意array中同一字符不能使用两次;解题代码:public class Solution { private class Pair{ p
2016-03-20 15:07:55
1778
原创 LeetCode-78-Subsets(回溯法)-Medium
题意理解:假定给定数组Array,其中Array的容量为N。求解,每次从Array中取出0-N个数的取法;题目分析:1. 同77(77题的变种,可以使用77题的核心算法代码);2. 注意要对给定数组做升序排列;解题代码:public class Solution { private ArrayList> ans= new ArrayList>();
2016-03-20 13:01:02
757
原创 LeetCode-77-Combinations(回溯法)-Medium
题意理解:列举从1-n中取出k个数的全部情况(如,[1, 2, 3]中取2个数的结果为[1, 2] [1, 3] [2, 3]);题目分析:使用回溯法(深度遍历+剪枝);解题代码:public class Solution { private ArrayList> ans= new ArrayList>(); private void
2016-03-20 12:46:52
518
原创 LeetCode-75-Sort Colors(双指针)-Medium
题意理解:将021201混杂排序的数组,最终整理为001122类型的数组结果;题目分析:1. 避免使用先计算0、1、2的个数,然后,再分别对数组进行重新赋值的方式进行解题;2. 使用双指针算法;解题代码:public class Solution { private void swap(int[] array, int x, int y){
2016-03-19 22:46:14
441
原创 LeetCode-74-Search a 2D Matrix(二分查找)-Medium
题意理解:查找数值target,是否在给定矩阵matrix中;题目分析:1. 二分查找;2. 先使用二分查找所在行,然后,使用二分查找当前行是否存在target;3. 注意相邻两项间的无限循环的边界处理(a解题代码:public class Solution { private int rowSearch(int rTop, int rBot,
2016-03-19 21:49:00
481
原创 LeetCode-73-Set Matrix Zeroes(数组)-Medium
题意理解:如果矩阵中某个点的值为0,则该点所在的行和列上所有的数均设置为0;题目分析:为了降低空间复杂度,需要在当前数组进行设置为0的操作:使用一个list记录所有值为0的位置,然后再对先前的数组进行对应行列设置为0的操作;解题代码:public class Solution { private class Pair{ publi
2016-03-19 20:40:14
857
原创 LeetCoce-71-Simplify Path(栈)-Medium
题意理解:简化路径名;题目分析:1. 注意 “.” 、".."特殊字符的处理;2. 运用栈;解题代码:public class Solution { public String simplifyPath(String path) { String ans="/"; if(path.length()==0){
2016-03-19 14:39:23
403
原创 LeetCode-70-Climbing Stairs(动态规划)-Easy
1. 题意理解每次可以上1个台阶或2个台阶,如果要上n个台阶,有多少种走法?2. 题目分析:1. 动态规划;2. 使用递归方法会超时:climbStairs(n)=climbStairs(n-1)+climbStairs(n-2);3. 使用非递归方式实现(动规要善用已计算结果);解题代码:public class Solution { publ
2016-03-19 13:17:05
871
原创 LeetCode-69-Sqrt(x)(二分法)-Medium
题意理解:实现sqrt()函数;题目分析:1. 典型的二分法;2. 注意使用long保留中间值,避免整数相乘出现溢出;解题代码:public class Solution { private int process(int left, int right, int val){ //System.out.println("left= "
2016-03-19 12:40:25
563
原创 LeetCode-67-Add Binary(数字/字符串处理)-Easy
题意理解:同66;解题思路:同66;解题代码:public class Solution { public String addBinary(String a, String b) { int longLen=a.length()>b.length()?a.length():b.length(); int[]
2016-03-19 12:04:18
393
原创 LeetCode-66-Plus One(水题/数值计算)-Easy
1. 题意理解用数组表示一个非负整数,求解该非负整数加一的结果,结果要求同样使用数组表示;2. 题目分析:1)注意最高位进位;2)注意数组的最低位为数值的最高位;3. 解题代码public class Solution { public int[] plusOne(int[] digits) { int len=digits.leng
2016-03-18 09:06:48
432
原创 LeetCode-64-Minimum Path Sum(动态规划)-Medium
1. 题意理解:对于MxN矩阵,求解从(0,0)点到(M-1,N-1)点的路径中,每个方格中的数值之和最小的路径。其中,每次只能从左向右,从上向下移动;2. 题目分析:1. 典型的动态规划题目;2. 记录过程中的结果,避免重复计算,否则会超时;3. 解题代码:public class Solution { private int maxPath=0;
2016-03-18 08:41:28
681
原创 LeetCode-63-Unique Paths II(动规)-Medium
题目理解:1. 同63(Unique Paths);2. 增加限制条件:有障碍的地方不能通过;题目分析:添加障碍位置判断处理逻辑;解题代码:public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int row=obstac
2016-03-16 08:47:23
663
原创 LeetCode-62-Unique Paths(动态规划)-Medium
题目理解:在只允许从左向右,从上到下移动的情况下,从mxn的矩阵(0,0)点,到(m-1,n-1)点,有多少路径;题目分析:1. 回溯遍历会超时;2. 动规;解题代码:public class Solution { public int uniquePaths(int m, int n) { int[][] array=new int
2016-03-14 08:51:58
1867
原创 LeetCoce-61-Rotate List(链表/指针操作)-Medium
题目理解:假设先前的链表长度为n,求解将前n-k个元素移动到从k开始的链表之后的结果;题目分析:1. 注意k>n的情况(k=k%n);2. 典型的指针操作;解题代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListN
2016-03-08 08:56:19
437
原创 LeetCode-60-Permutation Sequence(找规律)-Medium
题意理解:将0-n按照从小到大的顺序进行全排序,求解第k个排列结果题目分析:穷举会超时,找规律,1)第k个排列的第一个元素在0-n中的位置为(k-1)/(n-1)!2)在剩下的元素中继续找第一个;3)依此类推;在Java中使用String一直会超时,最终使用StringBuilder;解题代码:public class Solution
2016-03-04 09:07:30
2900
原创 LeetCode-59-Spiral Matrix II(Array)-Medium
题意理解:给定n,求解由1-n组成的n维矩阵。其中,矩阵内容的旋转遍历即为1-n的排序内容;解题分析:逐层递归填写n维矩阵的内容;解题代码:class Solution {private: void process(vector> &m, int _initPos, int _n, int _initNum){ int initPos=
2016-02-04 09:30:42
535
原创 LeetCode-58-Length of Last Word(字符串)-Easy
题意理解:求解最后一个不包含空格的字符子串的长度;题目分析:从后向前处理,找到最后一个不包含空格的字符子串;解题代码:class Solution {public: int lengthOfLastWord(string s) { int size=s.size(); if(size<=0){ r
2016-02-04 08:47:26
381
原创 LeetCode-55-Jump Game(贪心)-Medium
题意理解:数组中的每个元素代表最多向后能够跳跃的距离,求解是否能够到达最后的一个元素;题目分析:贪心算法:每一步都确定能够跳跃的最大距离,如果最后一个元素在这个距离内则表示可达;解题代码:class Solution {public: bool canJump(vector& nums) { int size=nums.size();
2016-02-04 08:30:27
2627
原创 LeetCode-54-Spiral Matrix(矩阵/模拟/递归)-Medium
题目理解:将一维或二维数组中的元素按顺时针放向进行打印;解题分析:1. 模拟;2. 递归:1)每次重新计算最开始的左上初始点;2)然后依此遍历最上一行,最右一列,最后一行,以及最左一行;3)注意避免重复遍历,处理好边界问题;解题代码:class Solution {private: void process(vector> &m,int
2016-02-03 08:55:13
417
原创 LeetCode-算法总结
Array: 矩阵;Hash Table:哈希;Linked List:链表;Math:数学;Two Pointers:双指针;Sting:字符串;Divide and Conquer:分治;Binary Search:二分;Dynamic Programming:动态规划;Backtracking:回溯;+++++++++++++Stack:堆栈;He
2016-01-16 22:37:11
1096
原创 LeetCode-53-Maximum Subarray(DP/分治)-Medium
题意理解:求解数列中的子数列,要求子数列的和最大;题目分析:1. DP(如解题代码所示);2. 分治(参考http://www.2cto.com/kf/201403/289418.html)解题代码:class Solution {public: int maxSubArray(vector& nums) { int size=nu
2016-01-16 21:07:20
1622
原创 LeetCode-50-Pow(x, n)( 二分法)-Medium
题意理解:自己实现pow()函数;题目分析:二分法:可以粗糙理解为pow(m, n)= pow(m, n/2)*pow(m, n/2)解题代码:class Solution {private:double funPow(double x, int n) { if(n==0){ return 1; }
2016-01-16 13:20:55
1145
原创 OJ解题总结
1. 基本数据结构1)数组;2)链表;3)string;2. STL工具1)vectot;2)map;3) hash(使用map来实现)4)string;5)algorithm: find(),sort();3. 题目分类1)模拟;2)规律/证明;3)数论相关:越界4)字符串处理:字串、回文4. 算法思想1)
2016-01-10 18:55:39
545
原创 LeetCode-49-Group Anagrams(哈希)-Medium
题意理解:将给定字符串分组,要求同一组的字符串由相同字符组成,最终,将各组字符串按字典序输出;题目分析:1. 将字符串先进行排序,然后通过字符串比较来判定是否为同一组;2. 将分组后的字符串集合再进行排序,从而满足题目的字典序要求;3. 在分组的过程中需要进行查找,本题中使用了hash的思想,但C++的STL中没有hash容器,解题代码中使用map来完成hash功能(m
2016-01-10 18:32:32
2724
原创 LeetCode-48-Rotate Image(模拟)-Medium
题意理解:将给定二维矩阵顺时针选择90度;题目分析:1. 一层一层的旋转(解题代码中就是这个方法);2. 技巧解法:将原始矩阵上下对折,然后再对角对折,等效于顺时针选择90度(没有想懂其中的数学原理);解题代码:class Solution {private: int read(vector> &m, int layer, int index){
2016-01-10 16:34:02
661
原创 LeetCode-47-Permutations II(DFS/剪枝)-Medium
题意理解:同46,但vector中的元素可能存在重复值;题目分析:同46一样通过DFS求解,但注意剪枝;解题代码:class Solution {private: vector> ans; bool findValue(vector &v, int endIndex, int val){ for(int i=0; i<endIn
2016-01-10 14:37:01
834
原创 LeetCode-46-Permutations(DFS)-Medium
题意理解:给定vector,其中的元素均为唯一的,求解vector中元素所有的排列方式;题目分析:典型的DFS解题代码:class Solution {private: vector> ans; void dfs(vector &preAns, vector &subNums){ if(subNums.size()==0){
2016-01-10 14:27:37
1327
原创 LeetCode-43-Multiply Strings(模拟)-Medium
题意理解:输入为两个string,代表两个非负的整数,求解这两个“正整数”的乘积,结果已string类型返回;题目分析:1. 模拟乘法的过程:1)整数n1,n2,将n2中的每一位与n1做乘法,并保存结果r1,r2.......rn;2)将r1,r2.....rn “对应”相加;解题代码:class Solution {private: vect
2016-01-10 12:59:38
375
原创 LeetCode-40-Combination Sum II(DFS)-Medium
题意理解:同39,但是,1)要求同一元素不能重复使用;2)输入元素中可能出现重复的内容,所以,剪枝过程要再39的基础上做调整;解题代码:class Solution {private: vector> ans; void dfs(vector candi, int index, vector preAns, int tar){ int
2016-01-03 22:46:02
584
原创 LeetCode-39-Combination Sum(DFS)-Medium
题意理解:列举出给定vector中内容之和为target的组合,其中,1)同一元素可以多次使用;2)结果按升序排列;3)不能有重复结果;解题分析:DFS注意剪枝,参考http://blog.youkuaiyun.com/xiaobaohe/article/details/7897966中的图解题代码:class Solution {private: v
2016-01-03 20:34:06
1092
1
原创 LeetCode-38-Count and Say(String/递归)-Easy
题意理解:按照题意描述,求解nth个生成字符串。如1,11,21,1211,的规则为:1)第一个初始值为1;2)为了描述第一个值只有一个1,所以生成第二个值11;3)为了描述第二个值有两个1,所以生成第三个值21;4)为了描述第三个值有一个2,和一个1,所以生成第四个值1211;题目分析:1. 使用stringstream来进行整数和字符串之间的转换;2
2016-01-03 10:47:14
796
原创 LeetCode-36-Valid Sudoku(模拟/遍历)-Easy
1. 题意理解:判断9宫格的填充内容是否符合9宫格游戏规则。2. 题目分析:1)模拟游戏规则,判断横、竖、以及9个子格的内容是否符合规范;2)遍历所有的情况;3. 解题代码:class Solution {private: bool isValid(vector &v){ sort(v.begin(), v.end());
2016-01-02 18:06:39
704
tpipv6.h(头文件)
2013-01-09
Putty资源合集
2012-11-30
windows界面下的网络编程
2011-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人