LeetCode
ACM_devil
这个作者很懒,什么都没留下…
展开
-
[LeetCode]77. Combinations
题意:给定n和k,从1到n中选k个数,存到结果中. 回溯,每次选择一个数字插入,检查是否满足k个数,满足加入ans,返回结果public List<List<Integer>> combine(int n, int k) { List<List<Integer>> ans = new ArrayList<List<Integer>>(); if(k == 0){原创 2016-03-10 16:37:40 · 508 阅读 · 0 评论 -
[LeetCode]199. Binary Tree Right Side View
题意: 对于一棵二叉树,站在右边观看,输出能够看到的数字,分析一下就是输出每一层的最右边的数字 思路: 先把根节点加入,然后依次对于剩下的节点,先判断右孩子是否存在,然后判断左孩子是否存在,由于是求每一层的最右边的数字,所以加一个标识符表示当前已经到大第几层,如果该层已经有了节点,那么剩余的(左兄弟)加入失败 代码:public List<Integer> rightSideView(TreeN原创 2016-03-10 18:56:50 · 320 阅读 · 0 评论 -
[LeetCode]101. Symmetric Tree
题意: 给你一棵二叉树,判断是否是镜面对称 思路: 从根节点开始,依次向两边展开,左右分别相等之后,分别判断左节点和右节点的(左孩子和右孩子)和(右孩子和左孩子)【镜面对称】,发现不相等或者为空,则返回错误 代码: public boolean isSymmetric(TreeNode root) { if(root == null){ return原创 2016-03-10 20:29:23 · 329 阅读 · 0 评论 -
[LeetCode]241. Different Ways to Add Parentheses
题意: 给你一个字符串,包括数字和运算符(+、-、*)。然后你选择往里面添加括号改变该字符串的运算顺序,求所有可能的运算顺序对应的结果的集合。例如”2-1-1”,可以改为如下形式((2-1)-1) = 0 或者(2-(1-1)) = 2,则结果为[0,2]。 思路: 主要操作就是往里面插入括号,并不涉及移动数字的位置,所以每次找到一个运算符之后,对于两边的字符串求得各自对应的结果集合(递归实现),原创 2016-03-10 21:25:09 · 339 阅读 · 0 评论 -
[LeetCode]198. House Robber
题意: 很基础的一道动态规划题目,给你一排数字,从中选出不相邻的若干个数字组成数字序列,求这些可能的序列中和最大的是多少? 思路: 动态规划,用dp[i]表示当处理到第i个数字时所能获得的最大值,当处理到第i个数字时,有两种选择,取或者不娶。若取出该数字,则上一个数字不能取,那么第i个数字之前的最大和为dp[i-2],取之后和为dp[i-2] + nums[i];若不娶第i个数字,则当前第i个数字原创 2016-03-10 22:21:22 · 456 阅读 · 0 评论 -
[LeetCode]74. Search a 2D Matrix
题意: 从一个二维数组中找出是否存在某一个值,数组特征,每一行从左到右依次增大并且下一行的第一个数字大于上一行的最后一个数字 思路: 不知道直接暴力能不能过,不过可以想到,利用数组的特征,将目标数字与每一行末尾的数字进行比较能够找到目标数字所在的行,然后在遍历该行即可,时间复杂度O(m+n) 代码:public boolean searchMatrix(int[][] matrix, int t原创 2016-03-10 22:41:34 · 328 阅读 · 0 评论 -
[leetcode]215. Kth Largest Element in an Array
题意:给一个数组,求出数组中的第K大数,比如[3,2,1,5,6,4] 求出第2大数,则为5分析:复习堆排序,对于这道题来讲,找第k大数,可以通过一个小顶堆实现。首先取数组中的前k个数组成小顶堆(具体堆的调整可以百度,或者看代码应该就理解),此时堆顶的数字就是这k个数字里面的第K大数,然后从每次从剩余的数组中拿出一个数字和堆顶的数字进行比较,如果比堆顶数字小,则直接丢弃;如果大于堆顶数字,则替换该原创 2016-07-26 21:28:08 · 447 阅读 · 0 评论