• [算法]华为笔试题——字母和十进制数映射


    题目描述:

    使用字母来表示一个正整数,用小写字母表示。映射规则很简单,如下所示:

    a 1

    b 2

    ...

    z 26

    aa 27

    ab 28

    ...

    huawei 104680767

    ...

    输入描述:

    输入字母最少1位,最多6位,且字母只能是小写字母。输入的十进制数不超过32位整数最大值。

    判断输入字符串的有效性,若无效输出ERROR。

    输出描述:

    输入十进制数,返回字母表示的数。输入字母表示的数,返回十进制数。

    示例:

    输入:

    ab

    输出:

    28

    思路:

    主要是一个26进制和10进制的转换,26转10很容易,10转26涉及到余数那里需要考虑一下特殊情况(26 % 26 == 0这里)。

    代码:

    package com;
    
    public class Test2 {
        public static String convertTo26(String input) {
            String ret = "";
            if (input.matches("[1-9]{1}[0-9]{0,}")) {
                int inputInt = Integer.parseInt(input);
                StringBuilder sb = new StringBuilder();
                do{
                    int temp = inputInt % 26;
                    if(temp == 0){
                        //这里需要特殊处理,否则如果是26不会生成z,会生成a`
                        sb.insert(0, convertChar(26));
                        inputInt = inputInt / 26 - 1;
                    }else{
                        sb.insert(0, convertChar(temp));
                        inputInt = inputInt / 26;
                    }
                }while(inputInt != 0);
                ret = sb.toString();
            } else if (input.matches("[a-z]{1,6}")) {
                int sum = 0;
                for (int i = input.length() - 1; i >= 0; i--) {
                    sum += convertInt(input.charAt(i)) * Math.pow(26, input.length() - 1 - i);
                }
                ret = sum + "";
            } else {
                ret = "ERROR";
            }
            return ret;
        }
    
        /**
         * 字符转数字a-1
         * @param charactor
         * @return
         */
        public static int convertInt(char charactor) {
            return ((int) (charactor - 'a') + 1);
        }
        
        /**
         * 数字转字符1-a
         * @param num
         * @return
         */
        public static char convertChar(int num){
            return ((char)(num + 'a' - 1));
        }
    
        public static void main(String[] args) {
            System.out.println(convertTo26("zzz"));
            System.out.println(convertTo26("321272407"));
        }
    }
  • 相关阅读:
    govalidator----结构体tag验证
    结构字段验证--validator.v9
    序列化
    案例:8,64,256都是2的阶次方数(8是2的3次方),用Java编写程序来判断一个整数是不是2的阶次方数。
    易错点
    什么是线程与进程?
    对象与实例的区别?
    什么情况下用断言?assert
    垃圾收集器什么时候回收垃圾?
    HashMap 和 HashTable 的区别
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/7458597.html
Copyright © 2020-2023  润新知