自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

House

退役acmer,现在FDU研究数据库、分布式、时间序列数据挖掘等相关内容。(欢迎交流,题材不限…尺度不限…)

  • 博客(29)
  • 收藏
  • 关注

原创 LeetCode 65 Valid Number

题意:给定一个字符串,判断它是不是一个数字。思路:首先要把字符串头尾的空格去掉。接着可以分2种数字表示方法讨论,1.普通写法 2.科学计数法。普通写法判断依据为,一定要有数字出现,一定没有0123456789+-.之外的字符出现,对于+-只能出现在第一位或者不出现,对于.如果是浮点数的话只能出现一次。注意.3表示0.3,3.表示3.0,都是合法的,但是.不能表示0.

2017-05-31 19:34:32 412

原创 LeetCode 64 Minimum Path Sum

题意:在数字矩阵中,每次行动向下或向右走一格,问从左上角到右下角的路径中数字和最小的是多少。思路:和 http://blog.csdn.net/houserabbit/article/details/72822932 的dp几乎一致,用dp[i][j]表示第i行第j列的路径和,则转移方程为 dp[i][j] = grid[i][j] + min (dp[i - 1][j], d

2017-05-31 19:16:03 342

原创 LeetCode 63 Unique Paths II

题意:给出一个带有障碍物的棋盘,每次行动向下或向右移动一格,求从左上角到右下角有几种方案。思路:简单dp题,假设dp[i][j]表示第i行第j列的方案数,那么状态转移方程就为 dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 。注意下边界条件就好了,而且对于障碍物,直接把dp清零即可。可以发现这个dp只和当前行和上一行有关,进而做空间优化,用

2017-05-31 19:09:38 330

原创 LeetCode 62 Unique Paths

题意:一个n*m的棋盘,每次行动只能向下或者向右走1格,求从左上角走到右下角有几种不同的方案数。思路:因为行动只能向下向右,所以总步数是一定的,即n - m + 2步。那么问题就变成了这里面的哪几步是向下的,就是组合数了,即从n - m + 2个中选n - 1个的组合数。题目里说的n和m值太夸张了,因为他的函数返回int……所以肯定很小。代码:class S

2017-05-31 18:59:35 368

原创 LeetCode 61 Rotate List

题意:将链表旋转k次,每次旋转表示为1->2->...->N变为N->1->2->...->N-1。思路:首先要测链表总长度n,因为k如果比n大,那么旋转整圈是没意义的。然后求出实际要旋转的次数x,最后就是简单的链表在n-x分割再头尾合并了。代码:/** * Definition for singly-linked list. * struct List

2017-05-26 11:36:27 301

原创 LeetCode 60 Permutation Sequence

题意:输入数字n和k,n表示给出数组[1, 2, 3, 4 ... n],输出这个数组的第k个排列。思路:这种题目和“使用一些数字,找出它们能组成的第k小的数字”是一样的,很典型的数位dp问题。假设我们已经确定了前i - 1位,现在确定第i位的数字是什么,也就是说现在要用剩下的n - i + 1个数字的第x个排列(x那么我们可以将剩下的数字从大到小枚举,如果第i位填x,

2017-05-26 11:13:19 380

原创 LeetCode 59 Spiral Matrix II

题意:画出n*n的蛇形矩阵。思路:与 http://blog.csdn.net/houserabbit/article/details/72763411 一致,更简单一点,因为它是正方形……这题还可以扩展,因为如果不是让画出矩阵,只是输出坐标(x,y)的数字是几,那么完全可以不开空间存矩阵,按照矩阵生成方法生成到(x,y)坐标时输出即可。代码:class S

2017-05-26 10:58:51 318

原创 LeetCode 58 Length of Last Word

题意:求一个一串字符中,最后一个单词的长度。思路:巨无聊一个题…… 从尾开始去掉空格,这时开始计数字母,直到串的头或者遇到空格为止。代码:class Solution {public: int lengthOfLastWord(string s) { int n = s.size(); if (n == 0) {

2017-05-26 10:50:12 291

原创 LeetCode 57 Insert Interval

题意:给出一些区间和一个待插入的区间,求他们的并。思路:如果把区间都放在一起,排好序,就可以按 http://blog.csdn.net/houserabbit/article/details/72763935 的方法做。但很显然有更高效的one pass方法。如果新区间与老区间都没有交,那么直接插入,如果有交,则维护区间的开始和终止位置在哪。代码:/*

2017-05-26 10:44:27 317

原创 LeetCode 56 Merge Intervals

题意:给出一些区间,求这些区间的并集。思路:按起点排序,维护该起点可以通过多个区间将终点延伸到哪里,即可。代码:/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0)

2017-05-26 10:18:18 278

原创 LeetCode 55 Jump Game

题意:给出一个步长数组nums,如果一个人站在i这个点上那么它可以向右最多走nums[i]步,问能否从最左端走到最右端。思路:这是一道比 http://blog.csdn.net/houserabbit/article/details/72736549 简单的题,只需要维护能走到的右端点在哪里,最后判断是不是最右端即可。代码:class Solution {p

2017-05-26 09:58:05 355

原创 LeetCode 54 Spiral Matrix

题意:给出一个数字矩阵,要求从左上角开始蛇形输出。思路:可以这样想,对于一个矩阵,每次输出都是它最外层的一圈,迭代着做。即从当前圈的左上角先到右上角再到右下角最后到左下角。代码:class Solution {public: vector spiralOrder(vector> &matrix) { vector ans;

2017-05-26 09:36:03 313

原创 LeetCode 53 Maximum Subarray

题意:给出一个数字数组,求其中和最大的子串。思路:经典的dp题。对于一个数字,要么把它合并到了之前开始的某个串中,要么从它开始一段新的串。所以,用dp[i]表示包含第i个数字的最大子串和,则dp[i] = max(dp[i -1] + nums[i], nums[i])。换一种想法,如果某个串的和是正数那么它继续增长才是有意义的。所以,可以维护一个子串和,如果子串和为正

2017-05-26 09:27:53 273

原创 LeetCode 52 N-Queens II

题意:n皇后问题,与 http://blog.csdn.net/houserabbit/article/details/72758088 不同,本题指数出解的个数,不要求方案。思路:可以用一下比LeetCode 51更优化的搜索方法,每放置一个皇后,我们记录它可以攻击哪一列、以及通过斜线攻击到的第一行的某2个位置。这样在放置皇后的时候,是否能放置到某个位置就可以O(1)判断了。

2017-05-26 09:14:39 322

原创 LeetCode 51 N-Queens

题意:n皇后问题,输出n*n的棋盘摆放n个皇后的方案。皇后攻击方式为同一行、同一列、同一斜线。思路:直接搜索。空间消耗方面,不需要申请整个棋盘大小,只要O(n)就够了,存某一行的皇后放在哪一列。代码:class Solution {public: vector> solveNQueens(int n) { int *column =

2017-05-25 21:51:48 285

原创 LeetCode 50 Pow(x, n)

题意:实现pow(x, n),即实数x的整数n次方。思路:快速幂算法。将指数表示成二进制,这时迭代生成x的1、2、4、16……次方,如果指数的二进制表示种某位为1,那么把对应x的某次方乘到答案里。代码:class Solution {public: double myPow(double x, int n) { if (x > -1e-

2017-05-25 20:12:52 260

原创 LeetCode 49 Group Anagrams

题意:如果两个单词由相同字母数组成那么它们应该分成一组,求给出单词的分组。思路:为每个单词做字母计数,然后根据计数排序,这样相同字母组成的单词就会挨在一起,最后按顺序分下组就行了。代码:#define N 26class Solution {public: vector> groupAnagrams(vector &strs) {

2017-05-25 19:59:06 253

原创 LeetCode 48 Rotate Image

题意:将一个正方形矩阵顺时针旋转90度。思路:2种方式——1.正常想法 —— 先对角线对称,再左右对称。 代码9ms。2.迷之规律 —— 在正方形里面画一个叉,分成的4个三角形相互替换。 代码6ms。代码:/** * 迷之规律 —— 在正方形里面画一个叉,分成的4个三角形相互替换。 6ms */class Solution {public:

2017-05-25 19:48:42 260

原创 LeetCode 46 Permutations + LeetCode 47 Permutations II

题意:给出一串不重复的数字,要求输出所有排列。思路:可以偷懒用next_permutation方法也可以自己实现,实现方法为从后往前找第一个出现的nums[i] 代码:

2017-05-25 19:21:03 355

原创 LeetCode 45 Jump Game II

题意:给出一个步长数组nums,如果一个人站在i这个点上那么他可以向右最多走nums[i]步,求从左端点走到右端点的最少步数。思路:如果点x可以用dp[x]步到达,那么[ x + 1, x + nums[x] ]区间内的点都可以用dp[x] + 1步到达。利用这个想法,可以O(n)的求出走一步可以到达哪些位置,走两步可以到达哪些位置,以此类推。代码:clas

2017-05-25 18:55:34 261

原创 LeetCode 44 Wildcard Matching

题意:给出一个字符串s和一个模式串p,p中的"?"表示任意单个字符,"*"表示任意字符串(可以是空串),问s和p是否匹配。思路:不同于 http://blog.csdn.net/houserabbit/article/details/54288851 这道题但是很相似,搜索效率低,所以用dp。dp[i][j]表示p串i位置之前与s串j位置之前是否匹配,状态转移方程即:p

2017-05-25 17:14:07 292

原创 LeetCode 43 Multiply Strings

题意:输入2个表示非负数的字符串,求它们的乘积。思路:暴力模拟吧!!19ms能过。我利用单个位置上数字只有10个来优化乘法次数,效率能提高到9ms。代码:/** * 利用数字个数优化 9ms */class Solution {public: string multiply(string num1, string num2) {

2017-05-25 16:29:08 282

原创 LeetCode 42 Trapping Rain Water

题意:给出一个代表高度的数组,求出由它组成的形状能储存多少体积的水。(下例中蓝色表示水)思路:本题有O(nlogn)排序解法和O(n)单调栈解法。排序解法——从大到小的排序数字,然后按顺序放置到数轴上。因为储水的高度取决于一段区间左右两端最高的高度,所以处理高度的方式是从大到小。对于当前需要安放的数字,如果它在之前安放的最左和最右两个位置之内,则答案中需要减去一部分

2017-05-24 19:15:14 383

原创 LeetCode 41 First Missing Positive

题意:求给出的一串数字中的最小的缺失的连续正整数。要求时间复杂度O(n),空间复杂度O(1)。思路:虽然不能排序,但是连续正整数这个性质比较特殊,举例来说:假设扫描数字串的时候遇到一个3,那就把它放在第3个位置。那么当把所有的数字都放好之后,从前到后扫描数字串,最先断开的地方就是答案。代码:class Solution {public: int fir

2017-05-24 18:11:40 206

原创 LeetCode 40 Combination Sum II

题意:集合中的每个数字只能使用一次,求出所有数字和为target的方案。思路:如果把集合中的数字计数,问题会变得和 http://blog.csdn.net/houserabbit/article/details/72677176 几乎一致。我的方法思路与计数思路几乎一致,只不过我没有合并数字,而是枚举每种数字个数的时候只取排在后面的数字,这样就保证了方案不重复。

2017-05-24 16:25:09 264

原创 LeetCode 39 Combination Sum

题意:数字集合中的每个数字可以使用无限次,求出所有的数字和为给定target的方案。思路:如果target小的话,可以当成完全背包问题来处理,但是target数值可能很大,所以干脆就搜索吧= =从大到小的搜索集合中的数字并枚举使用次数。代码:class Solution {public: vector> combinationSum(vector

2017-05-24 16:07:42 247

原创 LeetCode 38 Count and Say

题意:定义一种迭代,1, 11, 21, 1211, 111221, ...,比如1211 -> 111221表示1211从左往右读为1个1、1个2、2个1,求迭代n轮的结果。思路:用string暴力模拟迭代过程,不推荐迭代计数x个y这种方式,因为x>9的时候会变成2个数字,用string更好处理。代码:class Solution {public:

2017-05-24 15:01:28 255

原创 LeetCode 37 Sudoku Solver

题意:给出一个一定有解的填了一部分的数独,要求填满它。思路:我是分2步解决这个问题的:第1步检查每个格子可能填哪几个数字,第2步dfs搜索结果。dfs的时候只搜索第1步中找出的可能的数字,每次尝试填入一个格子并更新当前行、当前列、当前3*3格子的可选数字,注意回溯。我的代码3ms就可以跑完,效率还是很不错的。代码:class Solution {p

2017-05-24 14:49:21 240

原创 LeetCode 36 Valid Sudoku

题意:判断一个填了一部分的数独有没有解。思路:按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。代码:class Solution {public: bool isValidSudoku(vector > &board) { const int step = 3; bool app[step

2017-05-24 14:27:56 295

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除