leetcode每日刷题计划-简单篇day9

Num 38 报数 Count and Say

题意读起来比较费劲。。看懂了题还是不难的

注意最后的长度是sz的长度,开始写错写的len

在下次计算的时候len要更新下

说明

直接让char和int进行转换的过程中,int a=1,转成char是ascii为1的一个东西,要a+48,如果是char b='1',这时候转换成a是49

两者之间的转化完全是a的数值对应就是字符的ascii

还有就是char数组可以直接赋值给string

char a[100] ;string s=(a,0,len);len是长度哦,0是起始位置

class Solution {
public:
    string countAndSay(int n) {
        if(n==1) return "1";
        else if(n==2) return "11";
        else if(n==3) return "21";
        else if(n==4) return "1211";
        else if(n==5) return "111221";
        char a[10000];
        string s="111221";
        int len=s.length();
        int count=0;
        int sz=0;
        for(int i=6;i<=n;i++)
        {
            len=s.length();
            count=0;
            sz=0;
            char now=s[0];
            for(int j=0;j<len;j++)
            {
                if(s[j]==now)
                {
                    count++;
                }
                else
                {
                    a[sz++]=count+48;
                    a[sz++]=now;
                    count=1;
                    now=s[j];
                }
            }
            a[sz++]=count+48;
            a[sz++]=now;
            string ans(a,0,sz);
            s=ans;
        }
        return s;
      }
};
View Code

 Num 88 合并两个有序数组 Merge Sorted Array

注意一下实际读取的时候是0-len-1,len赋值修改一下比较好

然后,修改以后是大于等于0;while(len),if(len)这种判定条件都是大于0奥

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int len=m+n-1;
        int lenn=n-1;
        int lenm=m-1;
        while(len>=0 && lenn>=0 && lenm>=0)
        {
            if(nums2[lenn]>nums1[lenm])
                nums1[len--]=nums2[lenn--];
            else
                nums1[len--]=nums1[lenm--];
        }
        while(lenn>=0)
            nums1[len--]=nums2[lenn--];
        while(lenm>=0)
            nums1[len--]=nums1[lenm--];
    }
};
View Code

猜你喜欢

转载自www.cnblogs.com/tingxilin/p/10727400.html