boring
文章平均质量分 67
码农Crystal
Life is a box of chocolates you never know what you're going to get
展开
-
【无聊刷题】leetCode之解数独
题意:解数独,空缺的方格用.表示。解法:就是典型的回溯法,用row[i][j],column[i][j],grid[i][j]表示i行,i列,i格j是否用。用flag表示当前是否有解。若有解,则不用再递归下去。可能是leetCode里Hard的题目当中最简单的一题了。代码:class Solution {public: int row[9][10]; int colu原创 2016-08-29 09:40:18 · 1463 阅读 · 0 评论 -
leetCode_Palindrome Pairs
题意:给定一系列单词,若某两个单词拼接起来是回文串,则把这两个单词下标组成的二元组成为“回文对”,找出所有的回文对。方法:其实很简单,对于任意两个单词a,b,假设b的长度大于a。则a+b是回文串的条件是字符串b从最后一位到前面某一位反转字符串是a并且b串中该位置到第一位是回文串,若b+a是回文串的条件是字符串b从第一位开始到某一位反转的字符串是a并且b串中该位置到最后一位的串是回文串。所以对于原创 2016-10-23 11:34:39 · 410 阅读 · 0 评论 -
leetCode_Word BreakII
题意:给定一个字符串和一个单词序列,判断该字符串能不能分成若干个子串,且每个子串是单词序列的词。给出所有分法。解法:分为两个步骤:首先判断是否能分,然后再给出所有的分法。判断是否能分:从后向前扫描,如果从某一位置到字符串的结尾在单词序列里,或者某一序列在单词序列并且这一序列的下一个字母已经被验证能分,则isOk[i]=true,只要判断isOk[0]是否为true就可以。给出所有分法:原创 2016-09-22 14:39:26 · 269 阅读 · 0 评论 -
【leetCode】Text Justification
题意:给定一组单词序列和一个最大的单词长度,要求按行显示单词,单词之间有空格,每行的最大长度不能超过给定值。对于非末行,空格的长度均匀分配,对于末行,左对齐显示,即单词之间只能有一个空格,剩余的空格在最后一个单词之后。思路:没什么特别的,纯模拟题。代码:vector fullJustify(vector& words, int maxWidth){ vector length原创 2016-09-21 11:32:56 · 250 阅读 · 0 评论 -
leetCode_Minimum Window Substring
题意:给定字符串s和t,返回s中包含t所有字符的长度最短的子串例子:如s="ADOBECODEBANC",t="ABC",返回"BANC";解法:用letters记录t中每个字符的出现个数,用一个队列记录s中的那些在t出现的下标,用cur记录s中t字符串里的字符出现个数,用count表示满足了t中的多少个字符。也就是说,若s[i]在t出现,并且cur[s[i]]string minWi原创 2016-09-08 09:54:20 · 339 阅读 · 0 评论 -
leetCode_Substring with Concatenation of All Words
题意:给定一个字符串s和一个组等长的单词序列t,返回子串的开始坐标,子串为单词序列中所有单词的连接(只出现一次),顺序不重要。例如:s="barfoothefoobarman" words:["foo","bar"] 返回的字典序列[0,9]思路:非常简单,用map记录单词序列出现的次数,然后从每个index开始,看看t.size()*t[0].length()这个区间内是否把t所有的单词原创 2016-09-07 12:52:27 · 228 阅读 · 0 评论 -
leetCode_Longest Consecutive Sequence
题意:在一串数组中,找出最长的连续序列(元素间的相对位置可以变化)解法:这是一题变形的DFS。先用map把所有的数字(key)和是否出现(value)存起来,然后对于每一个元素,递增找出出现的元素,再递减找出出现的元素,每一次找到某个元素,让它的key为0既可。代码:class Solution {public: int longestConsecutive(vector&原创 2016-09-20 10:11:35 · 342 阅读 · 0 评论 -
leetCode_Valid Number
题意:给定一个字符串,判断这个字符串是不是合法的数字解法:很明显用状态图。值得注意的是:3.、.7、0003都算合法,科学计数法之后只能有整数。上状态图:代码如下:bool isNumber(string s){ int i,state=0,length=s.length()-1; for(; length>=0&&s[length]==' '; length原创 2016-09-06 11:40:15 · 238 阅读 · 0 评论 -
leetCode_Palindrome Partitioning II
题意:给定一个字符串,要把他这个字符串分成若干个回文子串。问数目最小是多少。题解:动态规划。用ans[j]表示以j结尾的回文子串数量,则如果s(0,j)是回文串,则ans[j]=1,否则 ans[j]=min(ans[i-1])+1,并且s(i,j)是回文串。代码:int minCut(string s){ int i,j,k,l=s.length(),left,right;原创 2016-09-14 10:47:11 · 276 阅读 · 0 评论 -
leetCode_First Missing Positive
题意:给定一个数组,找出未出现最小的正数思路:先找到正数中的最小值。如果大于1,则直接返回1。 否则,我们知道1应该放在a[0],2应该放在a[1],依次类推。所以遍历数组,当某个数不在该有的位置上时,交换到应在的位置上。要注意一趟不能保证完成,如(3,4,-1,1),一趟交换的结果是(-1,1,3,4),必须得多次才行。代码如下:(思路是参考网上的。。。)原创 2016-09-13 14:17:37 · 277 阅读 · 0 评论 -
leetCode_分组反转链表
题意:给一个链表及一个数k,每k个节点一组反转链表。例如:链表1->2->3->4->5以及k=2,返回的链表为2->1->4->3->5。解法:反转链表比较熟(可是今天还写错过1次)先确定start和end,previous先定位为start,end定位为previous->next,然后while(previous!=end) { start->next=start->next->next原创 2016-09-01 10:00:50 · 670 阅读 · 0 评论 -
leetCode_Recover Binary Search Tree
题意:给定一个二叉搜索树,其中有两个元素的顺序被对调了,请找出这两个元素思路:用pre节点代表前一个被遍历的节点,root节点代表当前被遍历的节点,如果pre->val>root->val则顺序有问题。如果出现1次,则把这两个元素的值交换;如果出现两次,则把第一次的pre和第二次的root值交换。其他到没啥,主要想清楚pre节点的记录方法。代码:/** * Definition原创 2016-09-09 15:34:22 · 281 阅读 · 0 评论 -
leetCode_Minimum Height Trees
题意:给定一个具有树性质的图(其实就是无向无环图),若把某一个节点作为树的根节点,则每个树都有一个高度。求最小高度树对应的根节点。解法:每一次遍历,把叶子节点都剪掉,留到最后的1——2个节点就是答案。代码:vector findMinHeightTrees(int n, vector>& edges){ vector du(n,0); map> e; vect原创 2016-10-08 10:51:51 · 324 阅读 · 0 评论