问题描述
问题大致是这样的,把当前的时间毫秒数转化成一个7个字符的字符串,与时间一一对应的,此字符串包括数字和字母,最好是一种可逆的算法。。 问题补充:有道理,18进制得到的是8位的,还不够.40进制还差不多huoyj 写道
解决方案
final static char[] digits = {'0' , '1' , '2' , '3' , '4' , '5' ,'6' , '7' , '8' , '9' , 'a' , 'b' ,'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,'o' , 'p' , 'q' , 'r' , 's' , 't' ,'u' , 'v' , 'w' , 'x' , 'y' , 'z' ,'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,'M' , 'N' , 'O' , 'P' , 'Q' , 'R' ,'S' , 'T' , 'U' , 'V' , 'W' , 'X' ,'Y' , 'Z' };private static String to62String(long i, int radix) { if (radix < Character.MIN_RADIX || radix > 62) radix = 10; if (radix == 10) return String.valueOf(i); char[] buf = new char[65]; int charPos = 64; boolean negative = (i < 0); if (!negative) { i = -i; } while (i <= -radix) { buf[charPos--] = digits[(int)(-(i % radix))]; i = i / radix; } buf[charPos] = digits[(int)(-i)]; if (negative) { buf[--charPos] = '-'; } return new String(buf, charPos, (65 - charPos)); }
解决方案二:
引用好思路,但是填补矩阵的字符不够啊由于00~09可以换成单位的 0~9,所有需要 8*9 = 72个字符,现有的只有62个字符,缺少10个,如果不能用符号,你只能想办法把一些特殊情况来缩减字符个数。
解决方案三:
可以考虑把年月日 去掉,只保留时分秒。这样位数应该够了。
解决方案四:
引用首先特点: 时间的毫秒数是少于或者等于14位的暂时不会超过。 开始做: 举例: 如果时间为: 1458201254752 (13位) 1. 补全14位,那么前补0 为 01458201254752 2. 你需要7位字符串,那么用14位分隔成7部分 : 01,45,82,01,25,47,52 3. 使用一种策略来将两位数字转换成一个字符,你会想到什么? 矩阵嘛 0 1 2 3 4 5 6 7 8 9 0 @ 1 # a b c d e f g h j 2 % A B C D E F G H I 3 & o p q r s t u v w 4 * O P Q R S T U V W 5 .............. 6 7 8 9 这样 01 取得 @ 这样取得7位字符组合成一个字符串即可。这确实是一种策略,但有失灵活,超过14位改怎么处理,15位,16位呢。其次,如果转换后也有比较大小的需要呢,这样就不能很好的比较了。而且矩阵实现起来比较负责,算法时间空间都不是很好。
解决方案五:
引用好思路,但是填补矩阵的字符不够啊26个英文字母, 大小写一共是 52个数字式10个,共62个,在加上#$@!乱其八糟的字符凑成81个不难吧,再说了还有中文字符呢,字符是从1~127个课件字符啊
解决方案六:
首先特点: 时间的毫秒数是少于或者等于14位的暂时不会超过。开始做:举例: 如果时间为: 1458201254752 (13位)1. 补全14位,那么前补0 为 014582012547522. 你需要7位字符串,那么用14位分隔成7部分 : 01,45,82,01,25,47,523. 使用一种策略来将两位数字转换成一个字符,你会想到什么? 矩阵嘛 0 1 2 3 4 5 6 7 8 90 @1 # a b c d e f g h j2 % A B C D E F G H I3 & o p q r s t u v w4 * O P Q R S T U V W5 ..............6 789这样 01 取得 @ 这样取得7位字符组合成一个字符串即可。
解决方案七:
可以考虑进制的转换,十进制毫秒表示位数肯定已经超过七位,可以转换为十六进制的,十六进制的也可以再转为十进制的,这个是可逆的。如果觉得十六进制的也不够用的话,就自己弄一个进制,比如0-9和26个字母组合起来的36进制的,和十六进制类似表示。你只需写个进制转换的方法就可以了。