vivo2020 recluta la escuela de primavera - el producto del número de bits

título Descripción

El producto se da ahora cualquier número entero positivo n, y el aspecto de salida para el más pequeño número entero positivo m (m> 9), tal que el m bits individuales (bits, diez, cien ... ...) es igual a n, si -1 existe salida.

Mi solución del problema

Ley contra la violencia

La idea más original es atravesada, ya que este número no debe ser menor que n, entonces n de la acumulación de inicio, y luego se convierte en una matriz de caracteres, calcula el producto, determinando
el método tonto, y es se proporciona condición de terminación difícil.

    public int solution (int n) {
        int a = n;
        while(true){
            char [] arr = Integer.toString(a).toCharArray();
            int m=1;
            for(char s:arr){
                m*=s-48;
            }
            if(m>6*n)return -1;
            else if (m==n) return a;
            a++;
        }
    }

método de factorización

El primer número de factorización completa n = n1 * n2 ··· nx
si hay un factor de más de 9, no debe existir m, ¿por qué?
Sabemos que el factor no es necesariamente un múltiplo de 2-9, entonces debemos utilizar el producto de números de un solo dígito que no son, desde luego, no existe m, directa -1
De este modo se determinó el factor de factorización de 2 a 9 entre
utilizamos una matriz para almacenar el número de veces que aparece cada factor. número ARR [i] i representa aparece
para hacer que el mínimo m, entonces debe hacer un gran número bajo, ya que debe ser colocado en la parte inferior 9 bits como.
Nosotros desde la parte superior a la segunda matriz de exploración inferior 9, para encontrar todos la posible composición de un gran número de factores, para el llenado bajo.
El número resultante debe ser mínimo.

    public int solution (int n) {
        int arr[] = new int[10]; //2~9用于存放因子个数
        for(int i=2;;i++){//因式分解,从2~9判断
            if(n==1)break;//完成
            if(i>9)return -1;//有大于9的因子,返回-1,结束
            if(n%i==0){  // 可以整除
                arr[i]++;//因子数量+1
                n = n/i; //除去因子
                i--;     //彻底分解,再次判断还能不能被i分解
            }
        }
        String res = ""; //用一个字符串存放结果
        for(int i=9;i>0;i--){ //从高位(9)开始扫描
            while(arr[i]>0){ //先看是否存在单个这样的数,如9
                res=i+res;
                arr[i]--;
            }
            //再看有没有多个数积是i的
            //由于不同的i 的因子组成不同,如8=2*2*2= 2*4,于是分情况讨论
            switch(i){
                case 9:
                    while(arr[3]>=2){
                        res="9"+res;
                        arr[3]-=2;
                    }
                    break;
                case 8:
                    while(arr[2]>=3){
                        res="8"+res;
                        arr[2]-=3;
                    }
                    while(arr[2]>0&&arr[4]>0){
                        res="8"+res;
                        arr[2]--;
                        arr[4]--;
                    }
                    break;
                case 6:
                    while(arr[2]>0&&arr[3]>0){
                        res="6"+res;
                        arr[2]--;
                        arr[3]--;
                    }
                    break;
                case 4:
                    while(arr[2]>=2){
                        res="4"+res;
                        arr[2]-=2;
                    }
                //7、5、3是素数,不能被非1因子分解
            }
        }
        return  Integer.valueOf(res);//返回结果
    }

Supongo que te gusta

Origin www.cnblogs.com/XT-xutao/p/12596299.html
Recomendado
Clasificación