- 博客(112)
- 收藏
- 关注
原创 回溯法——combination-sum、combination-sum-ii
题一 Combination Sum I,题目大意是这样的:有一个正整数集合C,和一个目标数T(T也为正整数)。现从C中选出一些数,使其累加和恰好等于T(C中的每个数都可以取若干次),求所有不同的取数方案。要求:所得集合元素不能降序排列,结果不能有重复的集合。 例如:C={2,3,6,7} T=7 res={ [7],
2016-05-31 13:27:11 4171
原创 回溯法——permutation-sequence 返回第k个排序序列
题目描述The set[1,2,3,…,n]contains a total of n! unique permutations.By listing and labeling all of the permutations in order,We get the following sequence (ie, for n = 3):"123""132"
2016-05-29 17:28:51 806 1
原创 next-permutation
题目描述:找到排序数组的下一个排序例如:1,2,3→1,3,23,2,1→1,2,31,1,5→1,5,1字典序排列把升序的排列(当然,也可以实现为降序)作为当前排列开始,然后依次计算当前排列的下一个字典序排列。对当前排列从后向前扫描,找到一对为升序的相邻元素,记为i和j(i 到第一个大于i的元素k,交换i和k,然后对从j开始到结束的子序
2016-05-29 16:52:46 373
原创 回溯法——permutation、permutation II数组数字的全排列
题目描述:permutationGiven a collection of numbers, return all possible permutations.For example,[1,2,3]have the following permutations:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].
2016-05-29 16:25:41 645
原创 回溯法——电话号码代表字符组合
题目描述Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.
2016-05-29 15:06:21 794
原创 BFS、DFS——机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?public class Sol
2016-05-29 14:20:07 3816
原创 DFS——矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符
2016-05-29 13:48:05 844
原创 回溯法——八皇后问题 n-queens
题目描述一个8*8的棋盘上有八个皇后,使她们互相不能攻击(即两个皇后不能出现在同一行,同一列,或同一对角线上)。package TraceBack;public class 八皇后问题 { public static void main(String[] args) { // TODO 自动生成的方法存根 int []data
2016-05-28 21:09:04 483
原创 回溯法——正方体的八个顶点
题目描述:将1--8这八个整数放在正方体的八个顶点上,要求相对的两面上四个数之和相等。求所有放法。package TraceBack;public class 正方体的八个顶点 { public static void main(String[] args) { // TODO 自动生成的方法存根 int data[]={1,2,3,4,5,6,7,8}
2016-05-28 20:51:09 2795
原创 回溯法——subsets、subsets-ii数字数组的所有组合
题目描述:subsetsGiven a set of distinct integers, S, return all possible subsets.Note:Elements in a subset must be in non-descending order.The solution set must not contain duplicate s
2016-05-28 20:09:27 874
原创 回溯法——字符所有组合
package TraceBack;import java.util.*;import java.math.*;public class 字符所有组合 { public static void main(String ss[]) { String str="abcd"; 字符所有组合 test=new 字符所有组合(); test.perm(
2016-05-28 20:08:13 619
原创 二分查找——sqrtx
题目描述Implementint sqrt(int x).Compute and return the square root ofx.public class Solution { public int sqrt(int x) { if(x <= 0) return 0; int start=1;
2016-05-28 15:53:07 320
原创 pascals-triangle,pascals-triangle-ii
题目描述 :pascals-triangleGiven numRows, generate the firstnumRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1
2016-05-28 11:24:30 439
原创 longest-common-prefix 求字符串数组的最长公共前缀
2个字符串的最长公共前缀,其长度肯定不会超过最短的字符串的长度,设最短的字符串长度为n,那么只要比较这2个字符串的前n个字符即可。如此得出这2个字符串的最长公共前缀prefix后,再拿prefix作为新的字符串和数组中的下一个字符串比较,方法同上。需要注意的是,如果数组中的某个字符串长度为0,或者求得的当前最长公共前缀的长度为0,就直接返回空字串。public class Solution
2016-05-27 21:21:53 341
原创 single-number、single-number2,数组中只出现一次的数字
题目描述:single-number1一个数组中除了一个数字外,其余数字均出现两次,找出只出现一次的数字。要求线性复杂度方法:两个相同的数字异或得0,一个数字和0异或结果是它本身。public class Solution { public int singleNumber(int[] nums) { int num=0; fo...
2016-05-27 20:17:00 1747
原创 valid-palindrome
验证一个字符串是否是回文字符串。Famous examples include "Amore, Roma", "A man, a plan, a canal: Panama" and "No 'x' in 'Nixon'"。 判读一个字符串是否是回文,一种方法可以将字符串倒置然后和原字符串进行比较。这里采用一种类似字符串翻转的方法,通过从前后两个方向来比较判断是否是回文。本题中的有效字
2016-05-27 14:58:46 395
原创 分治法——二分查找
基于循环和递归递归法: public int binary(int []data,int k) { if(data==null||data.length==0) return -1; else return binarySearch(data,0,data.length-1,k); } public int binarySearch(int []data,int
2016-05-27 11:16:50 496
原创 递归——整数划分问题
题目来源:http://www.cnblogs.com/dolphin0520/archive/2011/04/04/2005098.html整数划分,是指把一个正整数n写成如下形式:n=m1+m2+...+mi; (其中mi为正整数,并且1 例如当n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};该问题是求出n
2016-05-27 10:21:33 1466
原创 递归——汉诺塔问题
public class 汉诺塔 { public static void main(String[] args) { // TODO 自动生成的方法存根 char from='A'; char depend='B'; char to='C'; int n=3; 汉诺塔.hanoi(n, from, depend, to); } private static
2016-05-27 10:17:43 275
原创 动态规划——word-break&&word-breakii
题目描述Given a string s and a dictionary of wordsdict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.For example, givens ="leetcode",dict =["le
2016-05-26 11:55:31 422
原创 动态规划——数字字符串转换为字母组合的种数(decode-ways)
题目描述A message containing letters fromA-Zis being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given an encoded message containing digits, determine the total nu
2016-05-24 21:24:46 1620
原创 动态规划——scramble-string
题目来源:http://www.cnblogs.com/easonliu/p/3696135.html分析:这个问题是google的面试题。由于一个字符串有很多种二叉表示法,貌似很难判断两个字符串是否可以做这样的变换。对付复杂问题的方法是从简单的特例来思考,从而找出规律。先考察简单情况:字符串长度为1:很明显,两个字符串必须完全相同才可以。字符串长度为2:当s1="ab
2016-05-23 21:17:04 883
原创 动态规划——edit-distance 计算字符串的相似度
题目描述求两个字符串的编辑距离:具体操作方法为:a) Insert a characterb) Delete a characterc) Replace a character比如,对于“abcd”和"abcde"可以认为最少需要通过增加/减少一个'g'得到,则编辑距离为1。思路:若第一个字符是相同的,则考虑两个字符串从第二个
2016-05-23 19:30:58 476
原创 动态规划——unique-paths-ii
题目描述:Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as1and0respectively in
2016-05-23 18:56:30 397
原创 动态规划——unique-paths
题目描述一个m x n的矩阵,机器人从左上角走到右下角总共有多少种走法。注:每次只能向下或向右走一格。public int uniquePaths(int m, int n) { //状态转移方程为:f(i,i)=f(i,j-1)+f(i-1,j) if(m == 0||n == 0) return 0;
2016-05-23 17:49:01 325
原创 动态规划——minimum-path-sum
题目描述一个 m x n 的矩阵填充着非负整数,找到从左上角到右下角和最小的路径。注:每一步只能向下一格走或向右一格走。import java.util.*;public class Solution { public int minPathSum(int[][] grid) { if(grid == null) return
2016-05-23 16:08:49 433
原创 动态规划——字符串的交错组成(interleaving-string)
题目描述:要求是判断一个字符串能不能由两个字符串按照它们自己的顺序,每次挑取两个串中的一个字符来构造出来。For example,Given:s1 ="aabcc",s2 ="dbbca",When s3 ="aadbbcbcac", return true.When s3 ="aadbbbaccc", return false.递推公式如递归过程,竟然没有超时
2016-05-21 21:53:33 1104
原创 动态规划——candy
题目描述n个小朋友站成一排,根据他们的得分分发糖果,得分高的小朋友要比旁边得分低的小朋友得到的糖果多,每个小朋友至少得到一枚糖果,问最少要准备多少糖果?方法:先从左到右扫描一遍,使得右边比左边得分高的小朋友糖果数比左边多1(尽可能的少);再从右到左扫描一遍,使得左边比右边得分高的小朋友糖果数比右边多(这里要注意,从右向左比较时,只有当左边小朋友比右边的分高且得到的糖果少于等于右边时
2016-05-21 21:43:41 698
原创 动态规划——distinct-subsequences t在s中出现的次数
题目描述:给定2个字符串s, t,求t在s中出现的次数。要求可以是不连续的,但是t在s中的顺序必须和t以前的一致。例如:S ="rabbbit", T ="rabbit"Return3.解法:递推公式化为递归的代码为: 其中存在大量的重复计算.public class Solution { public int numDistinct(Strin
2016-05-21 20:20:48 895
原创 动态规划——triangle空间复杂度O(n)
仍是数字三角形问题,求从三角形顶端到最底层最小路径和。题目要求空间复杂度O(n),那么就要将二维数组压缩为一维。因DP中历史状态只能通过当前状态影响下一个状态,所以压缩数组是可行的。数字三角形如下:[ [2], [3,4], [6,5,7], [4,1,8,3]]import java.util.*;public class Solut
2016-05-21 18:55:36 1984 1
原创 动态规划——矩阵连乘问题
问题描述:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。例:设要计算矩阵连乘乘积A1A2A3A4A5A6,其中各矩阵的维数分别是: A1:30*35; A2:35
2016-05-20 11:50:03 1453
原创 动态规划——最大子矩阵和问题
题目描述:给定一个m行n列的整数矩阵A,试求A的一个子矩阵,使其各元素之和为最大。方法:借助一维数组连续子序列最大和的方法,将二维数组求最大子矩阵和的问题转化为求一维数组连续子序列最大和。 int [][]data = {{4,-2,9}, {-1,3,8}, {-6,7,6},
2016-05-20 11:25:05 2084
原创 动态规划——数字三角形最大和
题目描述:求数字三角形从顶层到底层的最大和,路径抉择时只能向下或向右下走。本题中的数字三角形:73,88,1,02,7,4,44,5,2,6,5题解:若三角形为等腰三角形或其他形式,先化为上述矩阵的样子方便解答,可用矩阵int [][]matrix={{7},{3,8},{8,1,0},{2,7,4,4},{4,5,2,6,5}}表示。//***
2016-05-20 10:20:34 948
原创 字符串、动态规划——最长公共子串LCS
题目描述:求字符串S,T的最长公共子串题目来源:http://blog.csdn.net/column/details/lf-algoritnote.html?&page=2字符串S,T所有前缀子串中的最长公共后缀,就是S,T的最长公共子串;(注:这里指的是前缀子串的后缀,而不是S,T的后缀!)名词含义:前缀子串:从字符串第一个字符开始的子串;后缀:后缀是指从某
2016-05-20 10:05:36 597
原创 动态规划——最长公共子序列
题目描述:两个字符串如"programming"和"contest"的最长公共子序列为“on”,长度为2; “abcd”和"mnp"的最长公共子序列为"",长度为0; "bcdb"和“abcbdab”的最长公共子串为“bcdb”,长度为4;注:相应的下标必须递增。如"bcdb"对应“abc
2016-05-19 10:49:10 510
原创 动态规划——最长上升子序列
题目描述:求出一个数组最长上升子序列长度。一个数的序列bi,当b1 //递归方法:找出递推公式,即DP的状态转移方程。//k表示以data[k]结尾,mostLength求以以data[k]结尾的最长上升子序列的长度。 public int mostLength(int []data,int k) { if(k == 0) return 1; int max=
2016-05-19 10:29:12 339
原创 动态规划——连续子序列最大和
题目描述:输入一个整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。子问题为以当前元素结尾的序列最大和//递归方
2016-05-19 10:00:21 440
原创 动态规划——斐波那契数列
//递归 public int fib2(int n) { if(n==0||n==1) return 1; return fib2(n-1)+fib2(n-2); }//自顶向下记忆化方式 private int data[]=new int [100];//不能确定index时,使用容器会发生下标越界; //所以自顶向下记忆化方式适用于本身n大小已知
2016-05-19 09:47:24 582
原创 动态规划——基础知识
/动态规划适用于:1.有重叠子问题 2.有最优子结构性质DP通常用来求最优解,能用动态规划求最优解的问题,必须满足:最优解的每个局部解也是最优的; 相关术语:* 阶段:把所给求解过程恰当的分成若干个相互联系的阶段;* 状态:过程的状态通常可以用一个或一组数来描述,称为状态变量;* 无后效性:过程的历史只能通过当前状态去影响它未来的发展;* 决策:从该状态演变到
2016-05-19 09:41:54 458
原创 1.关系性数据库及SQL
关系性数据库(RDB):建立在关系模型(二维表格模型)基础上的DB,因而RDB就是由二维表及其之间的联系组成的一个数据组织。结构化查询语句 SQL(Structured Query Language):非过程性语言,描述如何对数据进行增,删,查,改。SQL所做工作:1.更改数据库结构;2.更改系统的安全设置;3.增加用户对数据库或表的许可权限;4.在数据库中检索信息;5
2016-05-18 20:47:15 322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人