计算 s=(1+1)+(1+2)+(1+2+3)+````+(1+2+3+...+n) 第n项的值
#include<iostream>
using namespace std;
int main()
{
int n;
static int sum=1;
cout<<"请输入N:"<<endl;
cin>>n;
for(int i=1;i<=n;i++)//这里的i<=n
{
for(int j=1;j<=i;j++)
{
sum=sum+j;
}
}
cout<<"结果为:"<<sum;
return 0;
}
二叉树层序遍历
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
vector<vector<int> > levelOrderBottom(TreeNode *root)
{
vector<vector<int> > res;
if (root == NULL)
return res;
queue<TreeNode *> q;
q.push(root);
while (!q.empty())
{
vector<int> oneLevel;
int size = q.size();
for (int i = 0; i < size; i++)
{
TreeNode *node = q.front();
q.pop();
oneLevel.push_back(node->val);
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
}
res.insert(res.begin(), oneLevel);
}
return res;
}
};
最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入:s = "aacecaaa"
输出:"aaacecaaa"
示例 2:
输入:s = "abcd"
输出:"dcbabcd"
提示:
0 <= s.length <= 5 * 104
s 仅由小写英文字母组成
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
string shortestPalindrome(string s)
{
string rev(s);
reverse(rev.begin(), rev.end());
;
string combine = s + "#" + rev;
vector<int> lps(combine.length(), 0);
int remove = getLPS(combine, lps);
string prepend = rev.substr(0, rev.length() - remove);
return prepend + s;
}
int getLPS(string s, vector<int> &lps)
{
int j = 0, i = 1;
while (i <s.length())
{
if (s[i] == s[j])
{
lps[i] = j + 1;
i++;
j++;
}
else
{
if (j != 0)
{
j = lps[j - 1];
}
else
{
lps[i] = 0;
i++;
}
}
}
return lps[lps.size() - 1];
}
};
int main()
{
Solution solute;
string s;
cin>>s;
cout<<solute.shortestPalindrome(s)<<endl;
return 0;
}