第一道:
算法要求是:
把列表平面化
例子:
给[1,2[1,2]],返回[1,2,1,2] ;给[4,[3,[2,[1]]]]
, 返回 [4,3,2,1]。
第一眼看感觉不难,但是题目中也没有说什么数据类型,就给了一个类中的三个函数(仔细一看是给你用的),和一大堆英文解释。
看不太懂英文....,于是百度翻译,结合自己的理解终于把题目类中给的三个函数的作用弄明白了。
1、bool isInteger() ;
函数作用判断 列表中是否只含有整数,没有嵌套列表,是返回T,否则返回F。
2、int getInteger();
返回只有一个整数的列表中的整数。如果列表中有其他的,返回不确定。
3、const vector<NestedInteger> &getList();
返回列表中的嵌套列表。
题目到此为止,合理利用这三个函数就好。
由于之前只是对容器有一个大致的了解,看来还不够,于是学习了一些容器和迭代器的知识。
有了初步的学习后,
写了个代码:
vector<int> flatten(vector<NestedInteger> &nestedList) {
vector<int> x;
for (auto it = nestedList.begin(); it != nestedList.end(); it++)
{
auto a=*it;
if (a.isInteger())
x.push_back(a.getInteger());
else {
vector<NestedInteger> sub_list = a.getList();
vector<int> temp = flatten(sub_list);
result.insert(x.end(), temp.begin(), temp.end());
}
}
return x;
}
算法的核心是遍历递归。
但是。。题目里有一个挑战不用递归的,应该用一个循环就可以,之后有时间改一波。
提交了。AC。
第二道:
比较两个字符串A和B,确定A是否包含B中的所有字符。
想了想不难
直接写代码:
bool compareStrings(string &A, string &B) {
int flag1=0;
int *a=new int[A.length()];
for(int i=0;i<A.length();i++)
{
a[i]=0;
}
for(int i=0;i<B.length();i++)
{
for(int j=0;j<A.length();j++)
{
if(B[i]==A[j]&&a[j]==0)
{
a[j]=1;
flag1=1;
break;
}
}
if(flag1==1)
{
flag1=0;
continue;
}
else
return false;
}
return true;
}
特别注意需要加一个数组,来确认字符是都已经匹配过。