- 博客(17)
- 收藏
- 关注
原创 字符串的组合
问题:求一个字符串的所有组合?思路:可以把n个字符分成两部分:第一个字符和其余字符。假设我们想在长度为n的字符串中求m个字符的组合,我们先从头扫描字符串的第一个字符,针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。用栈存储选出的字符,递归实现。...
2019-04-07 11:18:30
161
原创 字符串的排列
void permutation(string str,int index){ int len = str.size(); if(index == len) cout << str; else{ for(int i = index;i < len-1;i++){ str[index] = str[inde...
2019-04-07 10:41:24
90
原创 二叉搜索树与双向链表
思路:左指针指向左子树的最大值,右指针指向右子树的最小值。struct node{ int value; node* left; node* right;}node* convert(node* root){ node* pLast = NULL; convertNode(root,&pLast); node* he...
2019-04-07 10:29:18
130
原创 复杂链表的复制
思路两步走,先复制next,在复制m_pSibling,时间复杂度主要花在复制m_pSibling上有两种解法:1.哈希表2.原地方法一:class node{public: int value; node* next; node* sibling; node(int _value){ value = _value;...
2019-04-07 09:57:46
93
原创 二叉树中和为某一路径的值
思路递归遍历节点;每遍历一个节点,计算和,并加入路径‘if(叶子节点){ if(和 == 整数){ 输出路径 }}else { 递归}减去和;路径pushstruct node{ int value; node* left; node* right;}void findPath(node* ro...
2019-04-06 23:12:06
176
翻译 判断一个数组是否是二叉搜索树的后序遍历序列
bool VerifySquenceOfBST(int sequence[], int len) { int i = 0; int root = sequence[len - 1]; for (; i < len - 1; i++) { if (sequence[i] > root)break; } int j = i; for (; j < len - 1; ...
2019-04-03 10:14:14
237
原创 已知入栈序列,求所有可能的出栈序列
思路:1.元素入栈递归恢复现场2.出栈递归恢复现场void popSeq(list<int>in,stack<int> st,vector<int> out,vector<vector<int>>& res,int len){ if (out.size() == len) { res....
2019-04-03 09:57:30
2189
原创 atoi函数
使用全局变量来记录返回值是否正确;//符号//非法字符//溢出enum Status{kValid = 0,kInValid}int g_Status = kValid;int strToInt(string s){ int len = s.size(); g_Status = kInValid; long long num = 0; int...
2019-04-02 11:14:41
127
原创 螺旋矩阵
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]...
2019-04-01 20:40:33
100
原创 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路:前序遍历树的每一个节点,如果遍历到的节点有子节点,就交换它的两个子节点。交换完所有非叶子节点的左右节点后,就得到了树的镜像。/** ...
2019-04-01 20:39:17
63
原创 树的子结构(剑指offer 18 )
class BinaryTreeNode {public: int value; BinaryTreeNode* left; BinaryTreeNode* right;};bool DoesTreeOneHaveTreeTwo(BinaryTreeNode * root1, BinaryTreeNode* root2){ if (root2 == NULL)return true...
2019-03-31 21:03:07
79
原创 反转链表
ListNode* ReverseList(ListNode* pHead) { if (pHead->next == NULL || pHead == NULL) return pHead; ListNode* pReversedHead = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while (pNode ...
2019-03-31 17:49:54
76
原创 调整数组顺序是奇数位于偶数的前面
核心思想:1.左指针指向头部;右指针指向尾部;向中间移动2.左指针遇到偶数停下;右指针遇到奇数停下;3.交换两个位置的值;
2019-03-31 16:08:38
65
原创 在常数时间删除链表节点
节点位置:1.有且只有一个2.在尾部3.在中间;核心思想:删除一个节点 =用该节点后一个节点覆盖该节点的值+改变指针;class ListNode {public: int value; ListNode * next;};void DeleteNode(ListNode** pListHead, ListNode* pToDeleted) { if (p...
2019-03-31 16:04:28
209
原创 打印1到最大的n位数
核心:1. +1程序:注意大整数2.打印:去除前面的0 bool Increment(string str) { int len = str.size(); int nSum = 0; //int isOverflow = 0; int nTakeOver = 0; for (int i = len-1; i >= 0; i--) { nS...
2019-03-31 15:49:45
78
原创 数的整数次方
辅助图 + - 0 + ~ ~ 1 - ~ ~ 1 0 0 x 1 double PowerWithUnsignedExponet(double base, unsigned int absExponet) { if (absExponet == 1)return base; if...
2019-03-31 15:20:01
118
原创 不同排序算法的比较
算法 算法描述 时间复杂度 稳定排序 最坏时间复杂度 插入 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 n^2 稳定 冒泡 它重复地走访过要排序的元素列,依次...
2019-03-29 16:48:39
315
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人