JavaScript - 字母序列

标签 javascript node.js algorithm google-chrome ecmascript-2016

我想创建一个应该返回序列中第 n 个字符串的函数

a、b、c、...、z、aa、ab、...、az、ba、...、zz、aaa、...

对于给定的数字 n(索引从零开始)。

这是我当前的功能:

const charCode = 'a'.charCodeAt(0);

function identName(a){
  var b = '';

  while(a){
    b = String.fromCharCode(charCode + a % 26) + b;
    a = a / 26 | 0;
  }

  return b || 'a';
}

有 26 个字母,因此我除以 26,每次将余数(模 26)的字符代码连接到字符串 b。然而,这是输出:

abc def g h i j k l m no p q r s t u v w x y z ba bb bc bd ...

如您所见,两个字母的字符串从ba开始。我试图在每次迭代中减少1,但结果是这样的:

a a b c def g hi j k l m no p q r s t u v w x y a' aa ab ac ad ...

有两次字符串a并且没有z。我究竟做错了什么?如何以最佳且快速的方式正确生成该序列?

编辑

我真的不明白我的问题中有什么不清楚的地方。我只是想要一个像这样调用 identName(0) 并返回 "a" 的函数,当像这样 identName(1) 调用时返回"b" 等...,当这样调用时:identName(26) 返回 "aa" 等等。怎么能描述得更简单呢。我真的不明白这里有什么不清楚的地方......:/

最佳答案

这应该可以解决问题。

const charCode = 'a'.charCodeAt(0);

var identName = function (a) {
  var b = [a], sp, out, i, div;

    sp = 0;
    while(sp < b.length) {
        if (b[sp] > 25) {
            div = Math.floor(b[sp] / 26);
            b[sp + 1] = div - 1;
            b[sp] %= 26;
        }
        sp += 1;
    }

    out = "";
    for (i = 0; i < b.length; i += 1) {
        out = String.fromCharCode(charCode + b[i]) + out;
    }

    return out;
}

本质上,每次进行转换时,您都会跳过 0 个位置,例如 27 -> 0,0 而不是 1,0。

关于JavaScript - 字母序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790901/

相关文章:

javascript - 为什么 $(this).val() 在这种情况下不起作用?

MySQL 中的 Javascript 数组

javascript - 使用 JQUERY 获取单击复选框的值并将其传递给 ajax

javascript - 在哪里更改 node.js 中的对象原型(prototype)?

algorithm - 棘手的链表问题

javascript - 如何在类中运行函数。 JavaScript

node.js - Mongoose 或查询

node.js - NodeJS 加密 RS-SHA256 和 JWT 承载

java - 将数字与另一个数字映射

algorithm - 如果我将二叉树存储在数组中,如何避免浪费空间?