LeetCode-290. Word Pattern & 415. Add Strings & 306. Additive Number

290. Word Pattern

class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] strs=str.split(" ");
        if(pattern.length()!=strs.length)
            return false;
        HashMap<Character,String> map1=new HashMap<>();
        HashMap<String,Character> map2=new HashMap<>();
        for(int i=0;i<pattern.length();i++)
        {
            char c=pattern.charAt(i);
            if(map1.containsKey(c))
            {
                if(!map1.get(c).equals(strs[i]))
                    return false;
            }
            else
                map1.put(c,strs[i]);
            if(map2.containsKey(strs[i]))
            {
                if(!map2.get(strs[i]).equals(c))
                    return false;
            }
            else
                map2.put(strs[i],c);
        }
        return true;
    }
}

415. Add Strings

class Solution {
    public String addStrings(String num1, String num2) {
        int len1=num1.length(),len2=num2.length();
        int len=Math.max(len1,len2)+1,a=0,b=0,flag=0;
        int[] arr=new int[len];
        for(int i=0;i<len;i++)
        {
            a=len1-i-1<0?0:num1.charAt(len1-i-1)-'0';
            b=len2-i-1<0?0:num2.charAt(len2-i-1)-'0';
            arr[len-i-1]=a+b+flag;
            if(arr[len-i-1]>=10)
            {
                arr[len-i-1]-=10;
                flag=1;
            }
            else
                flag=0;
        }
        StringBuilder sb=new StringBuilder();
        if(arr[0]==0)
        {
            for(int i=1;i<len;i++)
                sb.append(arr[i]);
        }
        else
        {
            for(int i=0;i<len;i++)
                sb.append(arr[i]);
        }
        return sb.toString();
    }
}

306. Additive Number

class Solution {
    
    
    public boolean isAdditiveNumber(String num) {
        
        for(int len1=1;len1<num.length();len1++)
        {
            String s1=num.substring(0,len1);
            if(len1>1 && s1.charAt(0)=='0')
                break;
            for(int len2=1;len2<num.length()-len1;len2++)
            {
                String s2=num.substring(len1,len1+len2);
                if(len2>1 && s2.charAt(0)=='0')
                    break;
                if(recursive(len1+len2,s1,s2,num))
                    return true;
            }
                
        }
        return false;
    }
    
    public static boolean recursive(int start,String s1,String s2,String num)
    {
        if(start==num.length())
            return true;
        for(int len3=1;len3<=num.length()-start;len3++)
        {
            String s3=num.substring(start,start+len3);
            if(len3>1 && s3.charAt(0)=='0')
                break;
            if(addTwoString(s1,s2).equals(s3) && recursive(start+len3,s2,s3,num))
                return true;
        }
        return false;
    }
    
    public static String addTwoString(String num1, String num2) {
        int len1=num1.length(),len2=num2.length();
        int len=Math.max(len1,len2)+1,a=0,b=0,flag=0;
        int[] arr=new int[len];
        for(int i=0;i<len;i++)
        {
            a=len1-i-1<0?0:num1.charAt(len1-i-1)-'0';
            b=len2-i-1<0?0:num2.charAt(len2-i-1)-'0';
            arr[len-i-1]=a+b+flag;
            if(arr[len-i-1]>=10)
            {
                arr[len-i-1]-=10;
                flag=1;
            }
            else
                flag=0;
        }
        StringBuilder sb=new StringBuilder();
        if(arr[0]==0)
        {
            for(int i=1;i<len;i++)
                sb.append(arr[i]);
        }
        else
        {
            for(int i=0;i<len;i++)
                sb.append(arr[i]);
        }
        return sb.toString();
    }
    
}

猜你喜欢

转载自blog.csdn.net/To_be_to_thought/article/details/89820042
今日推荐