- 博客(79)
- 资源 (1)
- 收藏
- 关注
原创 大数乘法。给定两个数字表示为字符串,返回乘数的数字作为一个字符串。
本题源自LeetCode----------------------------------------思路 :用一个字符串存结果长度为字符串1加上字符串2 的和,1 双重循环,将俩个字符串从尾到头遍历,将字符串1 的每一位相乘字符串2 的每一位赋值给结果字符串。2 是否有进位,3 最后截取结果字符串第一位不是0的的非零子串 string multiply(
2017-10-31 10:53:00 565
原创 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
本题源自LeetCode-------------------------------------------思路 回溯法1 数字可能有 -9 ~ 9 19种取值。2 用一个数组记录每个数字出现的次数。3 然后用回溯法求解代码: int array[19]={0}; vector > permuteUnique(vector &num) { v
2017-10-30 11:12:01 1126
原创 将二维数组旋转90度
思路: 按顺时针旋转分二步1 先按副对角线交换2 然后水平中线对称交换代码: void rotate(vector > &matrix) { int rows=matrix.size(); if(rows==0) return; for(int i=0;i<rows;i++){ //副对角线交换
2017-10-30 10:42:35 1725
原创 Anagram(回文构词法),哈希映射
本题源自LeetCode点击打开链接 -------------------------------------------------------思路: 回文即出现的字符串的字符顺序变化构成。1 用一个map 做映射。map《string,int》2 将字符串排序,然后放入map,值为 字符串在数组中的下标,保证了顺序3 如果已经出现过,就将出现过的字符串压入结果。代码
2017-10-30 09:55:07 519
原创 整数的幂次方
思路1 求整数的幂次方,则考虑三种情况,整数 x 幂次方 n1 如果x=0,n=0 返回1 ,或者n=0 返回1 2 如果x =0 ,n!=0返回 03 考虑 如果 n 为偶数,则 x 的幂次方等于 x的n/2次幂的平方;如果n为奇数,则 等于 x 的 (n-1)/2次幂的平方乘 x。考虑 n 的 符号代码 :非递归 double pow(d
2017-10-30 09:04:30 908
原创 八皇后问题
思路: 首先我们分析一下问题的解,我们每取出一个皇后,放入一行,共有八种不同的放法,然后再放第二个皇后,同样如果不考虑规则,还是有八种放法。于是我们可以用一个八叉树来描述这个过程。从根节点开始,树每增加一层,便是多放一个皇后,直到第8层(根节点为0层),最后得到一个完全八叉树。 紧接着我们开始用深度优先遍历这个八叉树,在遍历的过程中,进行相应的条件的判断。以便去掉不合规则的子树。
2017-10-29 10:47:58 180
原创 数组的 连续子序列最大和
思路: 1 遍历数组,如果当前累加和小于 0 就让和等于0;否则就保留最大的当前累加和int maxSubArray(int A[], int n) { int sum=0; if(n==0) return sum; int maxSum=A[0]; for(int i=0;i<n;i++){
2017-10-29 10:08:58 481
原创 给定一组不重叠的间隔,在间隔中插入一个新的间隔(如有必要,合并)。间隔最初按照起始时间进行排序。
本题源自LeetCode---------------------------------------------------思路 遍历间隔, 1 如果间隔小余要插入的间隔 则直接压入 2 如果有重叠则要合并,合并后的间隔,起始为最小的,结尾为最大的。3 如果遇到比要出入大的,就终止循环,然后把后面比插入大的间隔压入。vector insert(vector &interv
2017-10-28 11:05:19 1097
原创 给定一个字符串s由大小写字母和空白字符组成,返回字符串中最后一个字的长度。 如果最后一个字不存在,则返回0。
本题源自LeetCode-----------------------------------------------代码 : int lengthOfLastWord(const char *s) { stringstream ss(s); string str; while(ss>>str); return st
2017-10-28 10:22:15 2123
原创 给定一整数 n 产生一个 1 到 n*n的螺旋形数组
本题源自LeetCode------------------------------------------例如,假设n = 3,您应该返回以下矩阵:[ [1,2,3] [8,9,4] [7,6,5]]思路:即从四个方向构造数组 vector > generateMatrix(int n) { vector> result(
2017-10-28 10:00:37 1545
原创 集合[1,2,3,...,n]总共包含n! 独特排列。 给出n和k 返回第k个排列。
本题源自LeetCode------------------------------------------------------------------------思路1:回溯法 会超时 string getPermutation(int n, int k) { vector dp; string tmp; backPat
2017-10-27 11:38:55 1264
原创 给定一个列表,将列表向右旋转k个位置,其中k是非负数。
本题源自LeetCode-------------------------------------------例如:给定1-> 2-> 3-> 4-> 5-> NULL和k = 2返回4-> 5 - >1-> 2->3-> NULL。思路:1 先遍历整个链表求出长度len,因为 k 可能大于len2 将整个链表形成一个环,3 然后遍历链表,走到len-k处断开链表返回
2017-10-27 10:51:27 1542
原创 给定一个充满非负数的网格,找到从左上到右下的路径,最小化沿其路径的所有数字的总和。只能向下或向右移动。
本题源自LeetCode--------------------------------------------------------------------思路 动态规划1 如果 i=0并且 j!=0 则下一步只能向右走。2 否则j=0且i!=0 则只能下走。3 如果 i 和 j 都不等于0 则 选择向下 和向右 最小的那个。int minPathSum(vect
2017-10-27 09:34:05 1154
原创 给定俩个字符串,只包含二进制。求字符串的和
本题源自LeetCode-------------------------------------------------思路:从低位相加,保存进位代码 string addBinary(string a, string b) { int lena =a.length(); int lenb=b.length(); int
2017-10-26 12:18:48 513
原创 判断给定的字符串是否是数字
本题源自leetcoide --------------------------------------------思路1:去除空字符。然后先判断是否为+ 或者 - 然后在判断是否有小数点,再看是否为科学计数法。1 小数点最多有1 位,3 e 只能出现在小数点之后切e 后的数字只能是整数。2 + - 可以出现在首字符或者e 后面的首字符代码 : bool
2017-10-26 10:51:22 626
原创 给定一个数字表示为数字数组,加上一个数字。
本题源自LeetCode---------------------------------------------------------思路: 数组的最后存放的是数的最低位,加上一个1 后,判断是否有进位。代码1: vector plusOne(vector &digits) { int len=digits.size(); int c
2017-10-26 09:29:15 1046
原创 按给定的长度格式,格式化存储给定的字符串
本题源自LeetCode https://www.nowcoder.com/practice/e03feb44880d4254b19fbdf9d124cfe2?tpId=46&tqId=29110&rp=4&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking-------------------------------------------
2017-10-25 11:14:26 273
原创 求X的平方根
本题源自LeetCode----------------------------------------------------------1 牛顿逼近法。 int sqrt(int x) { if(x<2) return x; long r=x; while(r*r>x){ r=(r
2017-10-25 09:30:28 316
原创 斐波那契数列
本题源自LeetCode------------------------------------------------------你正在爬楼梯的情况。达到顶峰需要几个步骤。每次你可以爬1或2步。 你可以爬多少个不同的方式爬上去?代码:非递归: int climbStairs(int n) { if(n<3) return n;
2017-10-25 09:19:00 384
原创 返回给定绝对路径的,简化绝对路径
本题源自LeetCode-----------------------------------------------------例如:path ="/home/", =>"/home"path ="/a/./b/../../c/", =>"/c"思路1:将绝对路径按 / 划分为单个元素。然后判断如果 分割的元素为 '. ’ '则跳过,如果遇见 '..' 则弹出上一个元素。
2017-10-24 11:06:42 1349
原创 给定两个单词word1和word2,将word1转换为word2所需的最小步数. 您有以下3个操作允许一个字:a)插入一个字符 b)删除一个字符 c)替换一个字符
本题源自LeetCode----------------------------------------------------------------------思路 动态规划用一个dp 数组记录需要变化的步数。dp[i]【j】表示字符串长度为i 变为字符串长度j 需要的步数代码: int minDistance(string word1, string word2)
2017-10-24 10:40:22 7118
原创 给定一个m×n矩阵,如果一个元素为0,则将其整行和列的值设置为0.
本题源自LeetCode--------------------------------------------------思路1 遍历整个数组,遇到0 就把整行和整列不为0 的值置为* ,然后再次遍历数组把* 换为0 void setZeroes(vector > &matrix) { int rows=matrix.size(); int col
2017-10-24 09:51:42 7352
原创 三色国旗问题,
思路:设置三个变量,start代表前面的位置,i代表当前遍历,end代表后面位置。则如果遇到前面的,就交换i 和 start 并递增,如果遇到后面的就交换 i 和 end 对应的值,并递减end,否则就向后遍历代码: void sortColors(int A[], int n) { int i=0; int start=0; int
2017-10-24 09:06:55 448
原创 给定字符串S和字符串T,找到S中的最小窗口,其中将包含复杂度O(n)中T中的所有字符。
本题源自LeetCode---------------------------------------------------------思路: 用俩个map,标记T的子串各个字符的数量。代码 string minWindow(string S, string T) { int len1=S.length(); int len2=T.len
2017-10-23 12:28:25 2174
原创 给定两个整数n和k,返回1 ... n中k个数的所有可能组合。
本题源自leetcode-------------------------------------------------思路回溯法 vector > combine(int n, int k) { vector> result; if(nn) return result; vector path;
2017-10-23 10:35:38 6676 1
原创 给定一组不同的整数,S返回所有可能的子集。
思路:回溯法然后对结果排序 vector > subsets(vector &S) { vector> result; int len=S.size(); if(len==0) return result; vector path; sort(S.begin(
2017-10-23 09:57:52 1246
原创 给出一个2D板和一个单词,找出这个单词是否存在于网格中。 该单词可以由顺序相邻单元的字母构成,其中“相邻”单元是水平或垂直相邻的单元。 相同的字母单元可能不会被多次使用。
思路:回溯法,依次查找上下左右。四个 bool exist(vector > &board, string word) { int rows=board.size(); int cols=0; if(rows!=0) cols=board[0].size(); if(rows==0||cols==0)
2017-10-23 09:45:53 1697
原创 跟踪“删除重复”: 如果最多允许重复两次。
本题源自LeetCode-------------------------------------------------------思路一:即再用一个下标,表示新数组的长度。 int removeDuplicates(int A[], int n) { int index=0; for(int i=0;i<n;i++){
2017-10-23 09:08:03 199
原创 在一个有序的旋转数组中,查找给定值
思路一:因为数组有序,经过旋转后,数组保持局部有序。因此可以用二分查找。bool search(int A[], int n, int target) { int start=0; int end=n-1; while(start<=end){ int mid=(start+end)>>1; if(
2017-10-21 13:52:05 879
原创 给定一个排序的链接列表,删除所有重复项,使每个元素只显示一次。
本题源自leetcode ---------------------------------------------------------------------------------思路一 :创建头结点。 ListNode *deleteDuplicates(ListNode *head) { if(head==NULL||head->next==N
2017-10-21 11:16:21 538
原创 给定一个排序的链表,删除所有具有重复数字的节点,从原始列表中只留下不同的数字。
思路1:新建一个头节点,值为头节点值-1.如果当前节点有重复,就删除节点指直到不重复的,将当前节点的前一个节点的指针指向不重复的,保持链表不断。 ListNode *deleteDuplicates(ListNode *head) { if(head==NULL||head->next==NULL) return head; L
2017-10-21 11:00:34 1006
原创 给定填充0和1的二维二进制矩阵,找到包含所有的最大矩形并返回其区域。
本题源自LeetCode-----------------------------------------------------------------思路:用求直方图的最大面积求解。遍历二维数组。统计当前行及以上的直方图,然后计算。保存最大面积。直方图的最大面积:用一个堆栈做数据结构,如果堆栈为空就将下标压栈,如果栈顶元素大于要入栈的元素,就将所有比入栈元素大的弹出,计算面
2017-10-21 09:38:50 3792
原创 给定一个链表和一个值x,对它进行分区,使得小于x的所有节点都在大于或等于x的节点之前.保留两个分区中的每一个节点的原始相对顺序。
本题源自LeetCode------------------------------------------------------------例如:Given1->4->3->2->5->2and x = 3,return1->2->2->4->3->5.思路:先找到第一个大于或者等于给定值的节点p,然后将之后小于给定值的节点按顺序插入到p前面。 代码 :
2017-10-20 10:21:10 2165
原创 使用以下映射将包含A-ZIS的字母的消息编码为数字:'A' - > 1,'B' - > 2 ...'Z' - > 26 给定包含数字的编码消息,确定解码方式的总数。
本题源自LeetCode--------------------------------------------------------------------动态规划求解:用dp[s.length()+1]表示字符串s的解码方式dp[i] 表示i的字符的合法编码数量,取决于当前字符i dp[i] += dp[i-1],if s[i-1] ~('0'--'9') d
2017-10-19 09:27:47 2674 1
原创 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
本题源自LeetCode--------------------------------------------------------------------------------------大神的回溯法思路:http://blog.csdn.net/versencoder/article/details/52071930回溯法求解 1 传统的 内存超时: vec
2017-10-18 11:10:02 2856
原创 将链接列表从位置m反转到n。 在原位和一次通过。
思路:先找到m节点,并保存m的前节点pre。然后将m到n 之间的节点按头插法插入到 pre 节点之后。代码: ListNode *reverseBetween(ListNode *head, int m, int n) { if(head==NULL||m==n) return head; ListNode* p=head;
2017-10-18 10:23:17 320
原创 给定一个字符串只含有数字,判定这个字符串能表达的所有IP地址
本题源自LeetCode-------------------------------------------------------------------用三重循环遍历字符串,每个段的长度不能超过三,java代码: public ArrayList restoreIpAddresses(String s) { ArrayList result=new A
2017-10-18 09:22:06 5849 1
原创 树的前,中,后 序遍历
非递归: vector inorderTraversal(TreeNode *root) { vector result; if(root==NULL) return result; stack trees; while(!trees.empty()||root){ while(
2017-10-17 10:12:23 226
原创 给定n,生成存储值1 ... n的所有结构唯一的BST(二叉搜索树)。
本题源自LeetCode--------------------------------------------------------------------------------给定数字3 例如 1 3 3 2 1 \ / / / \ \ 3 2
2017-10-17 09:42:11 1241
转载 给定s1,s2,s3,发现是否通过s1和s2的交错形成s3。
本题源自LeetCode-------------------------------------------------------------------例如s1 ="aabcc",s2 ="dbbca", When s3 ="aadbbcbcac", return true.When s3 ="aadbbbaccc", return false. --------
2017-10-15 12:18:21 1664
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人