有一个字符串,如何生成一个数组,长度为6,包含所有不重复的组合。

例如:

s = 'abcdefghijklmnopqrstuvwxyz0123456789'

如何生成一个数组,包含所有可能的6位数不重复的组合。

收藏 0 分享浏览 1903
3年前
跟帖
芋头
3年前

自问自答:

var arr, func_url, getPINs, neighbours, s;
  s = "abcdefghijklmnopqrstuvwxyz0123456789";

  func_url = __F('url');

  neighbours = {
    1: s.split("")
  };

  getPINs = function(observed, prefix) {
    prefix = prefix || "";
    if (observed.length === 0) {
      return prefix;
    } else {
      return neighbours[observed[0]].reduce((function(acc, d) {
        return acc.concat(getPINs(observed.substring(1), prefix + d));
      }), []);
    }
  };

  arr = getPINs("111");

  arr.forEach((function(p) {
    console.log(p);
  }));
沙发
米粽粽
3年前
@芋头 你这个的结果还有aaa,bbb之类的,这是你要的结果?
板凳
芋头
3年前
@芋头 @米粽粽 我描述的不太好,就是数组的元素不重复,但是字符可以重复。。。
地板
米粽粽
3年前
function init(input) {
  var ret = []
  input.split("").forEach(function(letter) {
    if(ret.indexOf(letter) === -1) {
      ret.push(letter)
    }
  })
  return [{prefix: "", options: ret}]
}

function permutate(data, iteration) {
  var result = []
  var left

  for(var i = 0, l = data.length; i < l; i++) {
    for(var j = 0, k = data[i].options.length; j < k; j++) {
      left = data[i].options.slice()
      left.splice(j, 1)
      result.push({prefix: data[i].prefix + data[i].options[j], options: left})
    }
  }

  return iteration > 1 ? permutate(result, iteration - 1) : result.map(function(el) { return el.prefix })
}


permutate(init('abcdefghijklmnopqrstuvwxyz0123456789'), 6)
4 楼
前端乱炖
3年前
@米粽粽 迷踪大,我越来越崇拜你了
5 楼
米粽粽
3年前
@米粽粽 滚蛋……没啥技术含量,就是暴力遍历啊
6 楼
米粽粽
3年前

既然可以重复,好吧……

function permutate(data, pick) {
  if(typeof data === "string") {
    var chars = []
    data.split("").forEach(function(ch) {
      if(chars.indexOf(ch) === -1) {
        chars.push(ch)
      }
    })
    data = {results: [""], options: chars.join("")}
  }

  if(typeof pick !== "number" || isNaN(pick) || pick < 1) {
    return data.results
  }

  var store = []
  var rl = data.results.length
  var ol = data.options.length
  for(var i = 0; i < rl; i++) {
    for(var j = 0; j < ol; j++) {
      store.push(data.results[i] + data.options.substring(j, j + 1))
    }
  }
  data.results = store

  return permutate(data, pick - 1)
}


permutate('abcdefghijklmnopqrstuvwxyz0123456789', 6)
7 楼
8 楼
米粽粽
3年前
@米粽粽 @demo-i 递归太深爆栈了……
9 楼

洗牌函数?shuffle?

11 楼
说几句
广告位 点击查看投放指南

我的收藏