1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 思路: 相当于求转换为26进制的算法,不断/26,余数放在最后,将余数转化为对应的字符 注意 A-Z范围1-26,需要转成0-25
代码: /** * @param Integer $columnNumber * @return String */ function convertToTitle($columnNumber) { $sb = '';
while ($columnNumber > 0) { // A-Z是1-26,转成0-25 $columnNumber--; // 将余数转化为A-Z的字符 $sb .= chr($columnNumber % 26 + ord('A')); // 整除 $columnNumber = intdiv($columnNumber, 26); }
// 反转字符串 return strrev($sb); }
同理可得转为二进制的算法 function convertToTitle($columnNumber) { $sb = '';
while ($columnNumber > 0) { // 二进制是0-1,不需要$columnNumber--修正 $sb .= $columnNumber % 2; $columnNumber = intdiv($columnNumber, 2); }
// 反转字符串 return strrev($sb); }
|