• Leetcode 5298


    leetcode 5298

    给你一个方程,左边用 words 表示,右边用 result 表示。

    你需要根据以下规则检查方程是否可解:

    每个字符都会被解码成一位数字(0 - 9)。
    每对不同的字符必须映射到不同的数字。
    每个 words[i] 和 result 都会被解码成一个没有前导零的数字。
    左侧数字之和(words)等于右侧数字(result)。 
    如果方程可解,返回 True,否则返回 False。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/verbal-arithmetic-puzzle
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路是暴力加剪枝,只想说不要随便用STL,尤其是迭代器

    下面代码还是超时

    
    
    class Solution {
    public:
        int a[26];
        bool vis[26],used[26];
        char s[26];
        bool Begin[26];
        int mp[26];
        int ans=0;
        int B=0;
        void dfs(int step,int k,vector<string>&words,string result)
        {
            if(ans)
                return;
            if(step==k)
            {
                int num=0;
                for(int i=0;i<k;i++)
                {
                    mp[s[i]-'A']=a[num++];
                }
                int len=result.length();
                int tmp=0,sum=0,tp=0;
                for(int i=0;i<len;i++)
                    tp=tp*10+mp[result[i]-'A'];
                for(int i=0;i<words.size();i++)
                {
                    int l=words[i].size();
                    tmp=0;
                    for(int j=0;j<l;j++)
                        tmp=tmp*10+mp[words[i][j]-'A'];
                    sum+=tmp;
                }
                if(tp==sum)
                    ans=1;
                return;
                /*int add=0;
                int len=result.length();
                int stp=1;
                int flag=1;
                while(1)
                {
                    int tmp=0;
                    for(int i=0;i<words.size();i++)
                    {
                        int l=words[i].size();
                        if(l>=0&&stp<=l)
                        {
                            tmp=tmp+mp[words[i][l-stp]-'A'];
                        }   
                        tmp+=add;
                        add=tmp/10;
                        tmp=tmp%10;
                    }
                    if(tmp==0&&add==0)
                        break;
                    if(stp<=len&&tmp!=mp[result[len-stp]-'A'])
                    {
                        flag=0;
                        break;
                    }
                    stp++;
                }
                if(flag==1)
                    ans=1;
                return;*/
            }
            for(int i=0;i<=9;i++)
            {
                if(!vis[i])
                {
                    if(i==0&&Begin[s[step]-'A']==1)
                        continue;
                    a[step]=i;
                    vis[i]=1;
                    dfs(step+1,k,words,result);
                    vis[i]=0;
                }
            }
        }
        bool isSolvable(vector<string>& words, string result) {
        int p=0;
        for(int i=0;i<words.size();i++)
        {
            Begin[words[i][0]-'A']=1;
            int len=words[i].length();
            for(int j=0;j<len;j++)
            {
                if(!used[words[i][j]-'A'])
                {
                    used[words[i][j]-'A']=1;
                    s[p++]=words[i][j];
                }
            }
        }
        int len=result.length();
        Begin[result[0]-'A']=1;
        for(int i=0;i<len;i++)
        {
            if(!used[result[i]-'A'])
            {
                used[result[i]-'A']=1;
                s[p++]=result[i];
            }
        }
        dfs(0,p,words,result);
        if(ans)
            return true;
        else
            return false;
        }
    };
     
  • 相关阅读:
    IP应用加速技术详解:如何提升动静混合站点的访问速率?
    阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
    BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览
    洛谷P1457 城堡 The Castle
    洛谷P1461 海明码 Hamming Codes
    洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins
    洛谷P1459 三值的排序 Sorting a Three-Valued Sequence
    洛谷P1458 顺序的分数 Ordered Fractions
    洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
    洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk
  • 原文地址:https://www.cnblogs.com/flightless/p/12115924.html
Copyright © 2020-2023  润新知