前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 321. Create Maximum Number

LeetCode 321. Create Maximum Number

作者头像
ShenduCC
发布2020-07-13 15:13:54
3040
发布2020-07-13 15:13:54
举报
文章被收录于专栏:算法修养算法修养

题目

动态规划

代码语言:javascript
复制
class Solution {
public:
    string dp1[100005];
    string _dp1[100005];
    string dp2[100005];
    string bp1[100005];
    string _bp1[100005];
    string bp2[100005];
    vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {
        
        int n = nums1.size();
        int m = nums2.size();
        
        dp2[0]="";
        for(int i=1;i<=n&&i<=k;i++)
        {
            dp2[i]="";
            for(int j=n-1;j>=0;j--)
            {
                dp1[j]="";
                if(j>n-i)
                {
                    continue;
                }
                char x = '0'+nums1[j];
                dp1[j] = max(dp1[j+1],x+_dp1[j+1]);
                dp2[i]= max(dp2[i],dp1[j]);
            }
            
            for(int j=0;j<=n-1;j++)
            {
                _dp1[j]=dp1[j];
            }
        }
        
        bp2[0]="";
        for(int i=1;i<=m&&i<=k;i++)
        {
            bp2[i]="";
            for(int j=m-1;j>=0;j--)
            {
                bp1[j]="";
                if(j>m-i)
                {
                    continue;
                }
                char x = '0' +nums2[j];
                bp1[j] = max(bp1[j+1],x+_bp1[j+1]);
                bp2[i]=max(bp2[i],bp1[j]);
            }
            
            for(int j=0;j<=m-1;j++)
            {
                _bp1[j]=bp1[j];
            }
        }
        
        string ans="";
        for(int i=0;i<=k;i++)
        {
            string x = dp2[i];
            string y = bp2[k-i];
            
            string str="";
            int p=0;
            int q=0;
            while(p<x.length()||q<y.length())
            {
                if(p<x.length()&&q<y.length()&&x[p]>y[q])
                {
                    str+=x[p];
                    p++;
                    continue;
                }
                
                if(p<x.length()&&q<y.length()&&x[p]<y[q])
                {
                    str+=y[q];
                    q++;
                    continue;
                }
                
                if(p<x.length()&&q<y.length()&&x[p]==y[q])
                {
                    int p1=p;
                    int q1=q;
                    
                    int tag=0;
                    while(p1<x.length()||q1<y.length())
                    { 
                        if(x[p1]<y[q1])
                        {
                            tag=1;
                            break;
                        }
                        
                        if(x[p1]>y[q1])
                        {
                            tag=0;
                            break;
                        }
                        
                        if(p1==x.length()-1&&q1==y.length()-1)
                        {
                            tag=0;
                            break;
                        }
                        
                        if(p1<x.length()-1)
                            p1++;
                        if(q1<y.length()-1)
                            q1++;
                    }
                    if(tag==0)
                    {
                        str+=x[p];
                        p++;
                    }
                    else
                    {
                        str+=y[q];
                        q++;
                    }
                    continue;
                }
                
                if(p<x.length())
                {
                    str+=x[p];
                    p++;
                    continue;
                }
                 if(q<y.length())
                 {
                    str+=y[q];
                     q++;
                 }
            }
           
            if(ans.length()<str.length())
            {
                ans = str;
            }
            else if(ans.length()==str.length())
            {
                ans=max(ans,str);
            }    
            
        }
        
        
        vector<int> res;
        for(int i=0;i<ans.length();i++)
        {
            res.push_back(ans[i]-'0');
        }
        
        return res;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档