输入一个单向链表,要求将链表从m到n 逆序。不要开辟额外的空间。
开始题意读错了,以为将m和n两个节点交换位置。结果WA
但是后来一向,这个可以算是逆序的一个步骤,所以代码稍微改了改就AC了,其中额外注意m=1 n-m=1的情况。
class Solution {
public:
ListNode *reverseBetween(ListNode *head, int m, int n) {
……
90个题了,真心不容易。
两个字符串的二进制加法。找一个int来存储进位。
class Solution {
public:
string addBinary(string a, string b) {
string ans = "";
int lenMin = a.length() < b.length()?a.length():b.length();
int inbit = 0;
for(int i = 0;i < le……
给定一个数组,求该数的序列的下一个序列。如果该序列已经是最后一个最大的序列了,输出最小的排序。
首先思路一定要清晰。
要找第一个值得交换的数——该数尽可能的靠近个位,且该数的前面存在一个数比该数大。然后找到前面那个比该数大的最小的数交换即可。
最后~该数前面的所有数升序排序。
int cmp(int a,int b) {
……
单向链表的插入排序,本来很简单的题,写得跟屎一样。 是不是应该歇歇暂时不写leetcode了。明天就开题了。
class Solution {
public:
int GetCount(ListNode *head) {
int count = 0;
while(head != NULL) {
count++;
head=head->next;
}
return count;……
判断一二叉棵树是否为BST。
结合BST的特征一直递归着找就行。
class Solution {
public:
bool result;
enum Flag {left,right,leftright};
void isValidBSTStep(TreeNode * root,int val1,int val2,Flag flag) {
switch(flag){
case left:
if(root->val &l……
无穷背包?
输入2 3 6 7
输出2 3 6 7所有能构成7的情况。
int cmp(int a,int b) {
return a < b;
}
struct ValNode {
ValNode():IsExist(false){set_v.clear();}
vector<vector<int>>set_v;
bool IsExist;
};
class Solution {
public:
bool CheckIsExist(vector<int>&ite……
输入n,获得1-n生成的所有BTS
class Solution {
public:
vector<TreeNode *> genTreeNodes(int left,int right) {
vector<TreeNode *> nodes;
nodes.clear();
if(left > right) {
nodes.push_back(NULL);
return nodes;
……
模拟pow,注意超时和n为负数的情况。
可以二分下去这样复杂度为log(n)
class Solution {
public:
double powstep(double x,int n) {
if(n == 0)return 1.0;
if(n == 1)return x;
if(n == 2)return x<em>x;
if(n % 2 == 0) {
return powstep(powstep(x,n/2),2);
……
单链表划分。选择一个val x然后单链表中比x值小的节点在前,大的在后,但是小与小,大与大之间保持原位置。
想法:
先找到第一个比x小的值,放到最前面。
再找到第一个比x大的值。
接下来就是从x大的值的节点后面开始枚举,大的继续,出现小的,交换到第一个比x大的值前面。
class Solution {
public:
ListNode <……
序列化二叉树,但是行输出时从左到右从右到左交替进行。
class Solution {
public:
enum Direciton {left,right};
vector<vector<int> > zigzagLevelOrder(TreeNode <em>root) {
vector<vector<int>> result;
result.clear();
……