我太菜了

喜欢写Hello World的未来程序员.

把字符串转换成整数

你快乐吗?

把字符串转换成整数 C++,字符串,注意会出现字母。 class Solution { public: int StrToInt(string str) { if (str.empty()) return 0; int sign = 1; if (*str.begin() == '-') { sign = -...

扑克牌顺子

你快乐吗?

扑克牌顺子 C++,两种方法。 排序后判断王的数量能不能补齐顺子的空缺; 不排序,最大值与最小值的差是否小于4。 以上两种都要注意的几个点: 除了0以外,出现任何重复的数字都说明不能出现顺子; 空序列; 第二种陪了女朋友再更新。 更新第二种方法: class Solution { public: bool IsContinuous(vector&...

平衡二叉树

你快乐吗?

平衡二叉树 C++,AVL树,就是左右子树的高度差不能超过1,这个很容易判断啦。 注意,本题说的AVL树不一定遵照BST树的规则,搞得我以开始一直按BST+平衡的标准去写。。。 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { bool ans = true; ...

左旋转字符串

你快乐吗?

左旋转字符串 C++,字符串。 有一个很简单的道理, 就是XY变成YX,可以先XY翻转,然后再XY分别翻转,这个过程脑补非常简单。同理XY先分别翻转,然后再整体翻转也是可以的。 class Solution { public: string LeftRotateString(string str, int n) { if (str.empty()) return...

孩子们的游戏(圆圈中最后剩下的数)

你快乐吗?

孩子们的游戏(圆圈中最后剩下的数) C++,数学题。 真的是一道纯粹的数学题。 网上的解析都是推公式,我这里给出一个例子说明。。。 为了保证排版不乱,例子放在代码块里。 n = 6, m = 3 第4行的数字表示序号,以下先模拟一遍过程 0 1 2 3 4 5 0 1 2 3 4 5 3 4 5 0 1 0 1 3 4 4 0 1 4 0 0 ----所...

字符串的全排列

你快乐吗?

字符串的排列 C++,这道题和leetcode47是几乎一样的,一个对数字无重复全排列,一个队字母无重复全排列。 思路如下: 其实这个全排列算法就是固定一个数的位置(left),然后从下一位数再开始全排列(递归过程)…直到最后一位数,模拟手动全排列的过程; 所以如果要去重的话,只要控制每次排列时,固定的那个数是不一样的就行了; 因为固定的数不一样,那从这个数开始产生的全排...

复杂链表的复制

你快乐吗?

复杂链表的复制 C++,链表深拷贝。 这里可以直接在原链表上扩充,然后分裂成两个链表。 将原链表的每个结点复制一份并放每个结点之后,比如[1, 2, 3, 4, null]—>[1, 1, 2, 2, 3, 3, 4, 4, null]; 然后遍历每个原结点,让其拷贝结点的random指针指向其random结点的拷贝结点。比如[1, 1, 2, 2, 3, 3, 4,...

和为S的连续正数序列

你快乐吗?

和为S的连续正数序列 C++,双指针。 用指针left、right维护一个窗口,将窗口内所有数之和与sum对比,然后根据结果调整窗口大小。如果大,left++,如果小,right++。 等差数列求和。。。 class Solution { public: vector<vector<int>> FindContinuousSequence(int su...

和为S的两个数字

你快乐吗?

和为S的两个数字 C++,双指针。 一个指针left指向数组头,一个right指向数组尾部。按理说我们应该将每个数都和其他n-1个数组合一下求和,但是题中给的其实是有序序列。这样就能利用有序序列的特性: 左边指针往中间移动和会越来越大; 右边指针往中间一定和会越来越小; 两个数距离越远,乘积越小,反之越大。 所有就使用双指针往中间移动就行了。 class Solut...

合并两个排序的链表

你快乐吗?

合并两个排序的链表 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead...