2018.1.26 学好英语很重要。。

本文介绍了如何将嵌套列表转换为平面列表的方法,并提供了一种遍历递归的实现方式。此外,还讨论了一个简单的字符串匹配问题,通过逐字符对比的方式检查一个字符串是否包含另一个字符串的所有字符。

第一道:

算法要求是:

把列表平面化

例子:

给[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;
    }
特别注意需要加一个数组,来确认字符是都已经匹配过。








评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值