找出所有的划分,满足条件:各划分中的字符串为回文。
基本思路是:
1.搜索
2.每个位置要么断开,要么不断断开,一旦断开,判断前面新生成的划分是否为回文,若是,继续查找,不是,该断开是无效的。
3.找到末尾,然后记录。
class Solution {
public:
vector<vector<string>>ans;
vector<vector……
删除单向链表中所有有重复值的节点。
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
while(head != NULL && head->next != NULL && head->val == head->next->val) {
while(head != NULL && head->next != NULL && h……
输入数字串,输出对应手机键盘上所有的字母串的情况。
class Solution {
public:
vector<string>ans;
vector<string> letterCombinations(string digits) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<string>map = G……
根据前序和中序遍历构造二叉树,保证val不重复。注意别超内存。
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(preorder.size(……
根据中序和后序遍历,构造二叉树,保证val不重复。注意别超内存
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution……
这个题,哎哟我只想说我操。
开始题意理解错了,以为是判断某个数独是否有可行解,哎哟我擦,枚举?暴力。
用set集合做了一个 各种超时啊:
struct PointOfBoard {
set<int>set_p;
bool IsExist;
int val;
PointOfBoard():IsExist(false),val(-1){set_p.clear();}
};
class Solution {
pu……
输入一个单向链表,要求将链表从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;……