別のエンコード/デコード・ソリューション、不可欠であり、w /テスト。
const decode = n => {
let r = [];
let i = n;
while (i) {
r.push((i-1) % 26);
i = Math.floor((i-1)/26);
}
return r.reverse().map(c => String.fromCharCode(c + 65));
};
const encode = s => {
const digits = s.split('').map(c => c.charCodeAt(0) - 65);
let n = 0;
while (digits.length) {
let c = digits.shift() + 1;
n *= 26;
n += c;
}
return n;
};
const next = s => decode(encode(s) + 1).join('');
const tests = [
['A','B'],
['Z', 'AA'],
['AA','AB'],
['BB','BC'],
['BC','BD'],
['ZZ', 'AAA'],
['ZYZ', 'ZZA'],
['ZZA', 'ZZB'],
]
tests.map(parts => {
if (next(parts[0]) !== parts[1]) {
throw 'test failed for ' + parts[0];
}
console.log(parts[0], '->', next(parts[0]));
});
したがって、ベース26カウントシステムを実装していますか? –
@MikeC A = 1、Z = 26.の場合、問題0をどうやって解決しますか?A + = AならばAAAを表現する方法は? – YoungLearnsToCoding
楽しい質問 - 面接でそれを使用するように誘惑:) – Triptych