Given a string of numbers and a number of multiplication operators, what is the highest number one can calculate?

后端 未结 9 1557
醉话见心
醉话见心 2021-01-30 11:22

This was an interview question I had and I was embarrassingly pretty stumped by it. Wanted to know if anyone could think up an answer to it and provide the big O notation for it

9条回答
  •  梦毁少年i
    2021-01-30 11:57

    here's another Java solution. (I know it's correct for "312" and 1 multiplication and I think it works for others...

    You'll have to remember how to obtain the complexity of recursive methods on your own, haha.

    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class BiggestNumberMultiply {
    
        private static class NumberSplit{
            String[] numbers;
            long result;
            NumberSplit(String[] numbers){
                this.numbers=numbers.clone();
                result=1;
                for(String n:numbers){
                    result*=Integer.parseInt(n);
                }
            }
            @Override
            public String toString() {
                StringBuffer sb=new StringBuffer();
                for(String n:numbers){
                    sb.append(n).append("*");
                }
                sb.replace(sb.length()-1, sb.length(), "=")
                    .append(result);
                return sb.toString();
            }
        }
    
        public static void main(String[] args) {
            String numbers = "312";
            int numMults=1;
    
            int numSplits=numMults;
    
            List splits = new ArrayList();
            splitNumbersRecursive(splits, new String[numSplits+1], numbers, numSplits);
            NumberSplit maxSplit = splits.get(0);
            for(NumberSplit ns:splits){
                System.out.println(ns);
                if(ns.result>maxSplit.result){
                    maxSplit = ns;
                }
            }
            System.out.println("The maximum is "+maxSplit);
        }
    
        private static void splitNumbersRecursive(List list, String[] splits, String numbers, int numSplits){
            if(numSplits==0){
                splits[splits.length-1] = numbers;
                return;
            }
            for(int i=1; i<=numbers.length()-numSplits; i++){
                splits[splits.length-numSplits-1] = numbers.substring(0,i);
                splitNumbersRecursive(list, splits, numbers.substring(i), numSplits-1);
                list.add(new NumberSplit(splits));
            }
        }
    }
    

提交回复
热议问题