36进制数由 0~9 , a~z 共 36 个字符组成,请你按照加法规则计算两个 36 进制数的和。
例如 1b+2b = 3m
数据范围:两个数的长度都满足 , 两个数中包含的字符仅包括 和
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String thirtysixAdd (String A, String B) { // write code here int add = 0; StringBuilder sb = new StringBuilder(); char[] arr1 = A.toCharArray(); char[] arr2 = B.toCharArray(); int a = arr1.length - 1; int b = arr2.length - 1; while (a >= 0 || b >= 0 || add != 0) { int x = a >= 0 ? (Character.isDigit(A.charAt(a)) ? A.charAt(a) - '0' : (A.charAt(a) - 'a' + 10)) : 0; int y = b >= 0 ? (Character.isDigit(B.charAt(b)) ? B.charAt(b) - '0' : (B.charAt(b) - 'a' + 10)) : 0; int res = (x + y + add) % 36; if (res >= 0 && res <= 9) { sb.append(res); } else { sb.append((char)(res - 10 + 'a')); } add = (x + y + add) / 36; a--; b--; } return sb.reverse().toString(); } }
import java.util.*; public class Solution { public static HashMap<Integer, Character> map1 = new HashMap<>(); public static HashMap<Character, Integer> map2 = new HashMap<>(); static{ generate36Str(); } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String thirtysixAdd (String A, String B) { // write code here int n = A.length()-1, m = B.length()-1; StringBuilder ans = new StringBuilder(); int add = 0; while(n >= 0 || m >= 0 || add != 0) { int a = n >= 0 ? map2.get(A.charAt(n)) : 0; int b = m >= 0 ? map2.get(B.charAt(m)) : 0; int sum = a + b + add; ans.append(map1.get(sum % 36)); add = sum / 36; n--; m--; } ans.reverse(); return ans.toString(); } public static void generate36Str() { for(int i = 0; i <= 9 ; i++) { map1.put(i, (char) (48 + i)); map2.put((char) (48 + i), i); } for(int i = 0; i <= 26 ; i++) { map1.put(10 + i, (char) (97 + i)); map2.put((char) (97 + i), 10 + i); } } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String thirtysixAdd (String a, String b) { // write code here StringBuilder sb = new StringBuilder(); int i = a.length() - 1, j = b.length() - 1; int r = 0; while (i >= 0 && j >= 0) { int x = char2int(a.charAt(i--)) + char2int(b.charAt(j--)) + r; sb.append(int2char(x % 36)); r = x / 36; } while (i >= 0) { int x = char2int(a.charAt(i--)) + r; sb.append(int2char(x)); r = x / 36; } while (j >= 0) { int x = char2int(b.charAt(j--)) + r; sb.append(int2char(x)); r = x / 36; } if (r != 0) sb.append(int2char(r)); return sb.reverse().toString(); } private int char2int(char c) { if ('0' <= c && c <= '9') return c - '0'; return c - 'a' + 10; } private char int2char(int x) { if (0 <= x && x <= 9) return (char) ('0' + x); return (char) ((x - 10) + 'a'); } }