![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
xueluo0000
这个作者很懒,什么都没留下…
展开
-
Interleaving String|leetcode题解
这道题,我使用的是动态规划方法,对于字符串s2="dbbca",s1="aabcc",s3="aadbbcbcac"。设dp[i][j]代表s1[1..i]和s2[1...j]是否为s3[1...i+j]的交错串,则我们可以得出递归方程为dp[i][j]=(s3[i+j]==s1[i]&&dp[i-1][j])||(s3[i+j]==s2[j]&&dp[i][j-1]);即当s1和s2末尾字符和s原创 2015-01-27 22:42:26 · 373 阅读 · 0 评论 -
Reverse Linked List II|leetcode题解
此题比较容易,但是有一个小技巧,就是为了下面程序的一致性,让翻转链表结尾的指针多走一步。 ListNode *reverseBetween(ListNode *head, int m, int n) { if(m==n) return head; ListNode *preRHead=NULL,*rHead,*p,*q,*prep; p=q=hea原创 2015-01-22 22:26:08 · 388 阅读 · 0 评论 -
Set Matrix Zeroes|leetcode题解
这一题实际上思路应该是选择矩阵中肯定被置0的行和列存储矩阵中其他行和列是否会被置0的状态, 我们可以把这额外选出来的行和列作为标志行和标志列。因此,在整个矩阵遍历过程中,都要对其特殊处理。 void setZeroes(vector > &matrix) { if(matrix.empty())return; int m=matrix.size();原创 2015-01-22 22:44:17 · 475 阅读 · 0 评论 -
Path SumII|leetcode题解
这题使用树的先序遍历,同时存储路径就可以解决。 void preOrder(vector >&paths,TreeNode *root, int sum, vector&path,int level){ if(NULL==root->left&&NULL==root->right){ if(sum==root->val){原创 2015-01-22 22:33:50 · 436 阅读 · 0 评论 -
Palindrome Partitioning II|leetcode题解
此问题适合使用动态规划求解,因为此问题具有最优子结构性质和重叠子问题。 开始地时候,我是如此定义问题的结构的: 设dp[i][j]代表s[i..j]的最小切割数,则如果s[i..j]是回文串,则dp[i][j]=0。否则,dp[i][j]=min{dp[i][k],dp[k+1][j]},其中i 则可使用动态规划,添dp的上三角表,dp[0][n-1]就是问题的解。 bool isPali原创 2015-01-21 15:59:35 · 366 阅读 · 0 评论 -
Word Ladder|leetcode题解
这道题很容易想到使用广度优先搜索的方式,从起始单词start搜索到结束单词end,中间产生状态的产生有两种,一种是通过改变单词的一个字母并其是否在字典中来产生新的状态;另一种是通过以距离为1借助字典构建单词间的邻接关系。第二种状态产生的方式,太天真,由于字典有可能很大,构建邻接关系图的复杂度为单词个数的平方,无法接受。我第一个版本的代码使用此种方法生成新的状态超时。 在选用通过改变单词中的一个字原创 2015-01-21 22:19:00 · 519 阅读 · 0 评论 -
Largest Number|leetcode,使用stl sort函数排序,排序后容器的内容被改变,尝试各种办法没有找出bug,奇葩!!!!
今天做leetcode中的Largest Number,程序所出的异常,简直让我抓狂,是我程序的bug,还是stl sort的bug啊,不知道有什么好方法,可以确定程序中的问题。 #include #include #include #include #include #include using namespace std; static int i=0; bool compare2(con原创 2015-01-19 23:45:59 · 625 阅读 · 0 评论 -
Dungeon Game | leetcode 解题思路
此题可以使用动态规划的方法求解,关键在于如何定义问题的状态。此题的状态可以这样定义,dp[i][j]代表从格子[i][j]到终点(公主所在位置)所需要的最小健康值,那么递推方程可以定义为dp[i][j]=max{min{dp[i+1][j],dp[i][j+1]}-dungeon[i][j],0},其中,dungeon[i][j]代表骑士经过此方格所获得的健康值,含义是:此方格所需要的最小健康值等原创 2015-01-19 21:42:58 · 528 阅读 · 0 评论 -
Gas Station|leetcode题解
这个题目,只要理清里路,代码就容易写了,下面是我提交的代码,耗时10ms. 思路: 1.寻找第一个left[i]>0的站点S,作为起始站点。此时(gas[i]>cost[i]) 2.以S作为起始站点,判断其合法性,如果合法,则返回其下标,不合法则进入第3步 3.寻找非连续的下一个left[i]>0的站点作为S,转入第2步。(因为如果S合法,那么和S相连的left[i]>0的站点也一定不合法原创 2015-01-20 23:34:08 · 354 阅读 · 0 评论 -
Largest Number|leetcode解决方案
此题很容易想的方案,是对所有的数按照某种优先次序排序,然后链接就是最终结果。 那么这个优先次序是什么呢?两个数字A和B,谁应该排在前面,此时只需要比较“AB”和“BA”的大小就是两个数字A和B的优先次序。 AC代码如下: bool myCompare(int t1, int t2){ stringstream s; s<<t1<<""<<t2; string s1=s原创 2015-01-20 00:32:14 · 455 阅读 · 0 评论 -
Reorder List|leetcode题解
此题思路比较简单,分为三步: 1.利用快慢指针,将链表从中间断开。 2.翻转右半部分链表 3.将两个链表合并 首先,是我提交的第一个版本,耗时880mm,非常的慢 ListNode *reverseList(ListNode *head){ if(NULL==head)return NULL; if(NULL==head->next)return head;原创 2015-01-20 23:23:46 · 344 阅读 · 0 评论 -
Fraction to Recurring Decimal|leetcode题解
这个题目由于有很多的特殊状况,所以错误提交了很多次。 下面是AC代码,耗时4ms string fractionToDecimal(int numerator, int denominator) { //首先对0进行判断,以防对最终符号的异或运算结果有干扰 if(0==numerator)return "0"; if(0==denomina原创 2015-01-20 23:53:48 · 441 阅读 · 0 评论 -
Maximum Gap|leetcode题解
这道题可以使用桶排序的方法和基数排序的方法,对这两个方法不了解的可以参考算法导论。 这两个排序算法都可以在线性时间内对在一定范围内的数据进行排序,是能够解这道题的理论基础。 是有桶排序的思路是: 首先,对数据进行根据桶进行划分。 然后,统计桶间的最大间隔。 gmax=max(num);gmin=min(num); 当对[gmin,gmax]的范围内的数据进行均匀划分桶时,桶的区间长度b原创 2015-01-29 19:16:23 · 486 阅读 · 0 评论 -
Decode Ways|leetcode题解
此题使用动态规划的方法解答,很容易得出递归方程。 int numDecodings(string s) { int n=s.size(); if(0==n||(1==n&&'0'!=s[0]))return n; if('0'==s[0]) return 0; vectordp(n+1,0); dp[0]原创 2015-01-27 22:46:31 · 406 阅读 · 0 评论 -
Repeated DNA Sequences|leetcode题解
解题思路: 哈希表+位操作 一、算法分析 1.模式串编码 编码方式:手动编码和计算编码 A--00 C--01 G--10 T--11 或 A--(A-A+1)%5=1%5=1=01 C--(C-A+1)%5=3%5=3=11 G--(G-A+1)%5=7%5=2=10 T--(T-A+1)%5=20%5=0=00 那么每个模式串就是一个数字组合如 ACGTACGTC原创 2015-04-05 16:36:43 · 427 阅读 · 0 评论