- 博客(24)
- 收藏
- 关注
原创 Leetcode_Partition List
题意为将小于特定值x的所有节点均放在不小于x的节点的前面,而且,不能改变原来节点的前后位置。思路:设置两个链表,一个用于存放值小于x的节点,一个用于存放值不小于x的节点。class Solution {public: ListNode *partition(ListNode *head, int x) { if(head==nullptr) return head;
2015-02-10 16:11:49 635
原创 二叉树的构造方法
做Leetcode上面的题目时,遇到二叉树的问题,想要用一个二叉树进行验证,每次构造二叉树都很麻烦,特此写一个构造函数。1.用数组构造二叉树void treeNodeConstructor(TreeNode *&root, int data[],int n,int index){//此处root一定要加&,为对指针的引用 /* data为存储节点数据的数组,n为data数组的长度,in
2015-02-10 13:50:13 4620
原创 Leetcode_Sum Root to Leaf Numbers
递归实现,深度遍历,记录每一条路径。class Solution {public: int sumNumbers(TreeNode *root) { if(root==nullptr) return 0; vector> result; vector path; traverse(root,result,path); int n=result.size();
2015-02-10 13:04:29 629
转载 Leetcode_Gas Station
本文转自http://www.cnblogs.com/felixfang/p/3814463.html最直观的思路最直观的解法自然是O(n2) 时间复杂度的挨个尝试。这里不做讨论。我的代码:(超时)class Solution1 {public: int canCompleteCircuit(vector &gas, vector &cost) { int N=g
2015-02-09 21:52:18 361
原创 Leetcode_Add Binary
class Solution {public: string addBinary(string a, string b) { string s; int lenA=a.size(); int lenB=b.size(); if(lenA==0) return b; if(lenB==0) return a; if(lenA>lenB)
2015-02-09 20:08:45 394
原创 Leetcode_Implement strStr()
题意为判断一个字符串是否出现在另外一个字符串中,存在则返回其第一次出现的位置,否则返回-1.class Solution {public: int strStr(char *haystack, char *needle) { int Len1=strlen(haystack); int Len2=strlen(needle); if(Len1<Len2) re
2015-02-09 15:53:22 436
原创 Leetcode_Binary Tree Level Order Traversal
广度遍历二叉树,且要分别记录每一层的数据,方法有二。1.迭代法设置两个队列,其中一个队列用于存放上一层的节点,另一个队列用于存放下一层的节点。轮番使用。class Solution {public: vector > levelOrder(TreeNode *root) { queue q1,q2; vector> result; if(!root) return
2015-02-09 15:03:04 522
原创 Leetcode_Minimum Depth of Binary Tree
题意为得出二叉树的最小深度,但深度是定义为从根节点到叶子节点的最少节点数。容易出错的地方:为空节点时,直接返回0。这是不对的,要判断其是否有兄弟节点,没有兄弟节点的时候才能返回0,即这个节点的父节点是一个叶子节点。错解1:class Solution {public: int minDepth(TreeNode *root) { if(root==nullptr)
2015-02-09 10:37:41 410
原创 Leetcode_Path Sum II
题意需要记录所有可能的路径,可以设置一个变量path用于存储每次产生的路径,设置一个变量result存储所有符合条件的路劲。用递归可以实现,主要注意的问题是:对path路径的pop操作。方式一:每一次深度遍历之后,得到一条路径,符合条件就压入result中,然后要判断下一天路径。下一条路径是将前一条路径中的最后一个左节点弹出,压入右节点。下面这种方式,就是在寻得叶子节点之后,继续执行叶子节
2015-02-09 09:53:38 552
原创 Leetcode_Path Sum
递归实现即可class Solution {public: bool hasPathSum(TreeNode *root, int sum) { if(!root) return false; if(root->left ==nullptr&&root->right==nullptr&&root->val==sum) return true; return has
2015-02-08 21:40:43 471
原创 Leetcode_Factorial Trailing Zeroes(耗时问题)
出现0的情况是,出现5和2的倍数。[n/k]代表1~n中能被k整除的个数,而能被2整除的个数多余能被5整除的个数,故只要知道能被5整除的个数即可。那么怎样计算n!的质因子中所有5的个数呢?一个简单的方法是计算floor(n/5)。例如,7!有一个5,10!有两个5。除此之外,还有一件事情要考虑。诸如25,125之类的数字有不止一个5。例如,如果我们考虑28!,我们得到一个额外的5,并且0的总数
2015-02-08 20:41:43 405
原创 Leetcode_Valid Palindrome
判断字符串是否为对称的,主要是不考虑非字母非数字的字符。class Solution {public: bool isPalindrome(string s) { if(s.size()==0) return true; int len=s.size(); if(len==1) { if(isalnum(s[0])) return true; els
2015-02-08 19:50:30 358
原创 Leetcode_Longest Common Prefix
题意为找到所有字符串的最长的共同前缀。思路:1.先遍历一遍,得出最短字符串的长度2.对每一个字符串均与第一个字符串比较,出现不同,则得出最长公共前缀到此结束class Solution {public: string longestCommonPrefix(vector &strs) { int len=strs.size(); int min=INT_MA
2015-02-08 17:25:05 328
原创 Leetcode_Palindrome Number
这个问题就是判断整数是否为回文。思路1:利用一个字符串,将int转换为字符串,但这样会需要使用额外的内存思路2:经整数翻转,然后与原来的整数比较是否相等,但这样可能翻转后的整数会溢出思路3:不断取整数的最高位和最低位(10进制下)进行比较,相等则取次高位和次低位进行比较class Solution {public: bool isPalindrome(int x) {
2015-02-08 16:23:15 502
原创 Leetcode_String to Integer (atoi)
主要注意分析几种特殊的输入:1 不规则的输入,但是有效:"-3924x8fc","+432"2 无效格式,"++c","++1"3 数据溢出其中数据溢出的判断:To deal with overflow, inspect the current number before multiplication. If the current number is greater than
2015-02-08 15:20:20 572
原创 Leetcode_Min Stack
设置两个栈,一个vbase用于存放原来的数据,一个minbase用于存放最小数据。将第一个进栈的数据同时压入两个栈中。在之后压入数据时,对于vbase,直接将数据压入即可;对于minbase,则需要比较待压入的数据与vbase顶端数据的大小,小于等于vbase顶端的数据,就将这个数据也压入minbase中。如果后来得到的值是大于当前最小栈顶的值的,那么接下来pop都会先出去,而最小栈顶的值会一直在
2015-02-08 12:36:30 577
原创 Leetcode_ZigZag Conversion
ZigZag Conversion(图片来自http://www.cnblogs.com/sanghai/p/3632528.html)向下循环:nRows斜角线循环:nRows-2(减去首尾两个端点)定义一列和一斜对角线的循环长度为dLen=nRows+nRows-2;1 第一行和最后一行,均是由第一列加上dLen的倍数,即可2 其余行,每计算出下一列的下标j之后
2015-02-08 10:08:37 519
原创 stringstream中的.clear()和.str()
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要先继续清空,而清空很容易想到是clear方法,而在stringstream中这个方法实际上是清空stringstream的状态(比如出错等),真正清空内容需要使用.str(“”)方法。用.str(“”)方法可以清楚缓存,但是,需要重复使用同一个stringstre
2015-02-07 22:43:31 778
转载 stringstream的重要用法(数据类型转换)
本文转自http://blog.csdn.net/joeblackzqq/article/details/7032703C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C++
2015-02-07 22:10:48 914
原创 Leetcode_Compare Version Numbers
#include #include #include using namespace std;class Solution {public: int compareVersion(string version1, string version2) { vector v1; vector v2; int p=0; /*方法一:OK*/ /*for(int i=0
2015-02-05 22:23:06 391
原创 Leetcode_Excel Sheet Column Title
#include #include using namespace std;class Solution {public: string convertToTitle(int n) { string index="ZABCDEFGHIJKLMNOPQRSTUVWXYZ"; string s; if(n<=0) return s; while(n>26) {
2015-02-05 20:43:45 361
原创 Leetcode_Reverse Integer(考虑了溢出情况)
Reverse Integer Total Accepted: 52886 Total Submissions: 174213 My Submissions Question SolutionReverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321c
2015-02-03 21:59:32 346
转载 【单链表】环的入口点
本文文字部分转自http://blog.sina.com.cn/s/blog_6a0e04380101a9o2.html求解单链表环入口点的步骤:1:使用“指针追赶”方法找到相遇点(网上资料很多,此处略)。2:指针p1从链表头、p2从相遇点,同时出发,一次移动一个节点,再次的相遇点便是环的入口点。理解了好久,终于证明了为什么步骤2那样就能找到入口点。证明导向:p1从表头走,
2015-02-03 19:11:30 634
原创 printf和cout右向左求值
#include using namespace std;int main(){ int i=2; int b=2; int *ptr1=&i; int *ptr2=&b; cout<<*ptr1<<" "<<*ptr1++<<endl; cout<<*ptr2<<" "<<(*ptr2)++<<endl; return 0;}(*p)++等价于*p=*p+1也就是
2015-02-02 16:42:05 619
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人