同事问的一个问题

今天同事问了一个问题,感觉比较有意思,保存一下。

问题是这样的。比如一个字符串,"123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",从中取任意个数的字符组成新的字符串,比如“2M”,然后+1,这是要得到结果是“2N”,如果是“ZZ”的话,得到的结果应该是“111”。

实现代码如下:

import java.util.*;

/**
 * @Author: bob
 * @Description: TODO
 * @Date: 2019/8/27 17:33
 */
public class Test {

    public static String source = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static void main(String[] args) {
        String str = "1ZZ";
        String[] strs = str.split("");
        String[] sources = source.split("");
        Map<String, Integer> map = new HashMap<String, Integer>();
        int length = sources.length;
        for (int i = 0; i < length; i++) {
            map.put(sources[i], i + 1);
        }
        int zhi = 0;
        for (int i = 0; i < strs.length; i++) {
            zhi += Math.pow(length, strs.length - 1 - i) * map.get(strs[i]);
        }
        zhi += 1;
        new Test().result(zhi, length);
        StringBuilder sb = new StringBuilder();
        for (int i = list.size() - 1; i >= 0; i--) {
            sb.append(sources[list.get(i) - 1]);
        }
        System.out.println(sb.toString());
    }

    public static List<Integer> list = new ArrayList<Integer>();
    private void result(int zhi, int length) {
        int a = zhi/length;
        int b = zhi - a*length;
        list.add(b);
        if (a > length) {
            result(a, length);
        }else {
            list.add(a);
        }
    }
}

如果大家有更好的方法的话,请赐教,毕竟我不是科班出身,没学过算法(已经打算要补短板了)。

原文地址:https://www.cnblogs.com/-lanfenglanmeng/p/11421361.html

时间: 2024-10-17 22:30:12

同事问的一个问题的相关文章

实习同事问的问题

实习下班,在地铁上,一起实习的同事问了我一个他自己随便想到的问题: 有n个人m种语言,每个人都会这m种语言中的若干语言(可能为零也可能是所有),所谓会,也即能听懂也能说.现在某个人掌握了一条信息,如果他用他会的某一种语言说出这条信息,则所有会这种语言的人都能领悟,并且他们各自将用自己所会的所有语言再复述这条信息,不断下去.试问,指定的那个人至少用多少种语言说出那条信息,可以使得最终所有人都能得到信息,或者判断这是不可能做到的. 我乍一想,应该可以用网络流解决本问题.但是当我仔细思考建模后,发现我

之前同事问到的一道python题目

Python面试题 之前同事问了一道Python题目如下,暂时归类为面试题 题目:把类似'123.456'的字符串转换成浮点型数据 方法一: >>> print '{:.3f}'.format(float('123.456')) >>> 123.456 方法二:指定map.reduce高阶函数 思路:先处理小数点,然后在整数位.小数位相加.步骤如下 s = '123.456' 处理小数:使用字符串切片方式. s.split('.') 这样就得到长度为2的数组['123'

问对于一个给定的n,怎样才能用最少的步骤将它变到1

如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1.问对于一个给定的n,怎样才能用最少的步骤将它变到1.例如:n= 61n-- 60n/2 30n/2 15n++ 16n/2 8n/2 4n/2 2n/2 1 算法设计:首先想到的是递规算法,不过细想一下我们可以动态规划:设a(i)为整数i用最少步骤变成1的解,设n=i+1 那么我们考虑a(n),如果n为偶数,那么a(n) = a(n/2) +1; 如果为奇数,那么a(n) = Min(a( (n+1)/2+2 ),   a((n-1)

MFC 一个类訪问还有一个类成员对象的成员变量值

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/35263857 MFC中一个类要訪问另外一个类的的对象的成员变量值,这就须要获得原来那个类对象的指针,事实上有好几种方法都能够实现. 比方维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互訪问. 一.演示样例:创建MFC对话框,实现对个对话框之间数据訪问 我们创建一个MFC对话框应用程序,命名为Visitproject. 对话框本身有一个主界面(CVis

程序员同事问shell脚本刷流量,不讨巧帮他填了一个巨坑

程序员同事闲来无事问我可以用shell脚本写个刷微博访问量的没.于是脑海里想起了病毒营销或者fork×××这些词.依稀操刀稀松吧啦的写了起来.并测试了下,脚本内容是下面这样的:脚本跑起来的样子当然仅仅是为了展示shell脚本威力.当然还是希望大家靠实际的阅读量.拿微信公众号来说,刷量增粉的很多.同样笔者手里也有些软件.但一次都没有使用过.以来防止被中马,二来做人如果都急功近利.光追求虚妄的东西而没有实质内容.没有实际转化率和留存,本质上就是自欺欺人.不闲扯我们继续看 思路来源:Linux世界里著

面试oracle 经常问的一个问题- 事务

这几天面试:(面试的时候,没准备什么东西,因为最近很累,就带了个身体过去的,基本没带脑子去了)好了,我们技术面的差不多了. 我再问你个问题: oracle 中的事务? 事务你给我说说: 我去,事务,你想知道事务的什么? 事务的四个特性? 事务是干嘛的? 还是什么? 事务 面试官就很淡淡的说,事务就是简单的一点内容啊,你给我说说事务: 我说哥,你想知道什么事务,事务的那方面: 我真的不知道他想知道什么!然后,面试官就这么走了 (其实,在路上,慢慢想想才想起来很多东西) 先说事务吧! 什么是事务:

好不容易帮同事写的一个awk,要记下来

给昌哥写的过滤的东东. 是实现了,但感觉丑,不规范. 记得下先. 原始数据格式: 2016-07-22 09:50:40 [ pool-2-thread-1:232231791 ] - [ DEBUG ] origin match time:09:50:21, user:180783710, orderId:ZAZWXNLN, orderQty:1100, matchedQty:400 2016-07-22 09:50:40 [ pool-2-thread-1:232231791 ] - [ D

提问题进不去。想问大家一个关于返回值的问题(图的遍历),求给小白解答啊

关于词语接龙,能否把所有的单词首尾连接起来(串成一条线即可,不需要围成环) 2 6 aloha arachnid dog gopher rat tiger 3 oak maple elm 为什么返回值是0:而不是 n..第一个完全可以首尾相连啊.求解答啊 #include <stdio.h> #include <string.h> #include <vector> using namespace std; vector<int>map[30]; int v

做一个有脑子的程序员

程序员是最理性的一个群人,除非面对电子产品的时. 程序员是一群高智商的群体,唯一的缺点就是发际线总是很难防守. 程序员是一群情商比较低的人群,常常看到程序员仅仅因为对技术的理解不同而大吵起来. 程序员常常是一群豁达的人,今天大吵一架明天接着聊代码. 但今天要讨论的却是,做一个有脑子的程序员. 有一个朋友也开了公众号,偶尔写写自己对技术的理解,平时也没怎么宣传,所以同事都不知道.有一天一个同事问他一个关于微服务的问题,刚好他前两天研究了这块,就将公众号中的文章分享给了同事. 同事看完之后解决了问题