【Leetcode】171. Excel Sheet Column Number,168. Excel Sheet Column Title

来源:互联网 发布:制作情书的软件 编辑:程序博客网 时间:2024/05/21 23:00

171题目:https://leetcode.com/problems/excel-sheet-column-number/?tab=Description

给定一个string,转换成数字。

类似于多进制之间的互转,但是有一点不同,这里是从1开始的,即A对应1.而一般的多进制,都会对应到0.这是一点需要注意的。

思路就是从string的右端向左端遍历,假设现在是c,然后计算出c代表的数字,然后乘以26的某一次方,再加上之前的结果。怎么理解?比如AB,那么AB就是在B的基础上加了A个26得到的结果。

代码:

public int titleToNumber(String s) {        int r = 0;        for(int i = s.length() - 1; i >= 0; i--){        char c = s.charAt(i);        r = ((int)Math.pow(26, s.length() - i - 1)) * (c - 'A' + 1) + r;        }        return r;    }


168题目:https://leetcode.com/problems/excel-sheet-column-title/?tab=Description

是上述问题的逆向过程。给定数字求string。

思路是不断取摸,然后用除法更新,继续。

取摸的结果就是最低位的值。那么这里是从1开始的,应该用26模还是27?  26!因为除数只由个数决定,而与开始位置无关。A-Z共有26个!如果是从1开始,那么就先减去1,就可以得到正确结果。因为26=Z,如果不减26%26=0,如果减一就是25%26=25。所以取摸运算的模与个数有关,然后根据起始位置做一个减法。处理完最低位以后处理次低位,也要先减一,然后重复即可。

代码:

   public String convertToTitle(int n) {    String s ="";        while(n > 0){        s += (char)((n - 1) % 26 + 'A');        n = n / 26;        }        return s;    }


0 0
原创粉丝点击