随笔分类 - Leetcode
摘要:问题:将数组中的某个值为0的元素所在行和列的其他值都为0分析;遍历数组找到某一值为0然后遍历他的上下左右直到边界,要用while而不能用搜索,因为搜索过去新节点的操作以旧结点一样的操作 要用一个新数组,不然原数组修改后会影响到下次的查找class Solution {public: vo...
阅读全文
摘要:问题:判断二叉树是否为镜像二叉树分析:递归判断,根节点单独判断,然后递归左结点和右结点,之后每次一起递归左结点的左结点和右结点的右结点比较,左结点的右结点和右结点的左结点比较/** * Definition for binary tree * struct TreeNode { * int ...
阅读全文
摘要:问题:n个结点总共有多少个二叉搜索树分析:n=1,sum1=1 n=2,sum2=2; n=3,sum3=2(头结点为1)+1(头结点为2)+2(头结点为3) n=4,sum4=5(头结点为1,sum3)+2(头结点为2,sum1*sum2)+2(头结点为3,sum2*sum1)+...
阅读全文
摘要:问题:判断二叉树是否为平衡二叉树分析:树上的任意结点的左右子树高度差不超过1,则为平衡二叉树。 搜索递归,记录i结点的左子树高度h1和右子树高度h2,则i结点的高度为max(h1,h2)=1,|h1-h2|>1则不平衡c++/** * Definition for binary tree * ...
阅读全文
摘要:问题:找出只出现一次的数,其他数出现了三次分析:将数转化为二进制的位,数出现了三次相当于其对应的二进制上每个位置出现了3次,这里有个抽象的地方就是,例如数中包含1,3两个其二进制的第一位都包含1, 怎么区分,其实并不需要区分,无论是数字3的还是数字1的二进制第一位的1都无所谓,因为我们完全可以...
阅读全文
摘要:问题:输出杨辉三角分析:对于每一行收尾都等于1,其他位置f[i,j]=f[i-1,j-1]+f[i-1,j]class Solution {public: vector > generate(int numRows) { int i,j; if(numRows==0...
阅读全文
摘要:问题:将有序的数组中重复的数字去掉分析:由于有序所以只用和前一个比较就行class Solution {public: int removeDuplicates(int A[], int n) { int i,j; if(n==0 || n==1) return n...
阅读全文
摘要:问题:将二叉树的所有结点指向他的右边的一个结点分析:对于每一个结点来说,其操作都是一样的,除了他的左儿子指向右儿子外,其左儿子的全部右后辈均指向其右儿子的全部左后辈/** * Definition for binary tree with next pointer. * struct TreeLin...
阅读全文
摘要:题意:二叉树的最小深度注意 1.当root为空的时候直接返回0,因为MIN赋值很大,所以如果不单独预判的话会返回MIN 2.判断树的深度应该到叶子节点,也就是左右子结点都为空的那个结点 3.树的深度的根节点深度为1class Solution {public: void dfs(...
阅读全文
摘要:问题:从起点到终点总共有多少条路径分析:f[x,y]=f[x+1,y]+f[x,y+1],用记忆化搜索就可以解决了class Solution {public: int num[110][110]; int dfs(int m,int n,int x,int y) { ...
阅读全文
摘要:题意:将三种颜色排列,相同的颜色放在一起,依据红绿蓝012的顺序放置分析:统计红绿蓝分别有多少个,然后重新给数组赋值class Solution {public: void sortColors(int A[], int n) { int num1,num2,num3,i; ...
阅读全文
摘要:问题:交换相邻的两个结点分析:建立新链表每次插入ret->next后在插入ret,需要在判断下若最后只有一个结点不需要交换,注意每次交换了结点要把尾结点的下一个指向空class Solution {public: ListNode *swapPairs(ListNode *head) { ...
阅读全文
摘要:问题:有序合并两个有序链表分析:归并排序的合并部分class Solution {public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { ListNode *helper=new ListNode(0); ...
阅读全文
摘要:问题:上楼每次能走一步或两步,有多少种走法class Solution {public: int a[1000]; int dfs(int n) { if(n<0) return 0; if(n==0) return 1; if(a[n])...
阅读全文
摘要:问题:将有序链表中的重复元素删除分析:由于有序,所以p结点是否重复只需要和它的前一节点比较是否相等就可以了,我们可以定义一个helper新头结点链表 将p结点与新链表的尾结点比较,若不相等则加入新链表中。class Solution{public: ListNode *deleteDup...
阅读全文
摘要:问题:最大连续子窜和是多少分析:动态规划,定义max记录最大值,sum记录以i结束的连续子窜的最大值class Solution {public: int maxSubArray(int A[], int n) { int sum; int MAX=A[0]; ...
阅读全文
摘要:问题:二叉树中序遍历递归实现/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :...
阅读全文
摘要:问题:将字符窜转换成数字分析:感觉题目不难,但是细节很多,容易想不到1.数字前面有空格 如s=“ 123456”2.数字前出现了不必要或多于的字符导致数字认证错误,输出0 如s=“ b1234” ,s=“ ++1233” , s=“ +-1121”3.数字中出现了不必要的字符,返回字符前的数字...
阅读全文
摘要:问题:删除数组中和elem相等的元素,并且返回新数组大小。英语不好。。。读错题了。。class Solution {public: int removeElement(int A[], int n, int elem) { int i,j; for(int i=0;...
阅读全文
摘要:问题:罗马数字变为整数class Solution {public: int romanToInt(string s) { char c[10][10][10]={{"0","I","II","III","IV","V","VI","VII","VIII","IX"},{"0"...
阅读全文