Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save jikeytang/23466a3462f57ce3c434 to your computer and use it in GitHub Desktop.

Select an option

Save jikeytang/23466a3462f57ce3c434 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140618-题目1
如何把一个字符串,用特定的符号有序的连接,列出所有连接可能。
如:'ab' -> a-b,
'abc' -> a-bc, a-b-c, ab-c,
'abcd' -> a-bcd, ab-cd, abc-d,a-b-cd, ab-c-d,a-bc-d,a-b-c-d
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@itbeihe

itbeihe commented Jun 18, 2014

Copy link
Copy Markdown
function buildMap(length){
    var arr = [];
    var split2 = function(num,beforeNum){
        for(var i=1;i<num;i++){
            var newArr = beforeNum.concat([i,num-i]);
            arr.push(newArr);
            if(num-i>1){
                split2(num-i,beforeNum.concat([i]));
            }
        }
    }
    split2(length,[]);
    return arr;
}

function convertStr(str){
    var strArr = str.split('');
    var fullArr = [];
    var map = buildMap(strArr.length);
    for(var i=0;i<map.length;i++){
        var dArr = strArr.concat();
        var mstr = '';
        var cellArr = [];
        for(var j=0;j<map[i].length;j++){
            var cstr = dArr.splice(0,map[i][j]).join('');
            cellArr.push(cstr);
        }
        mstr = cellArr.join('-');
        fullArr.push(mstr);
    }
    return fullArr;
}

convertStr('abcde');

@zhishaofei3

Copy link
Copy Markdown
function abc(str) {
    var i = 1;
    var arr = [];
    while (i < str.length) {
        convert(str.substr(0, i), str.slice(i));
        i++;
    }

    function convert(str1, str2) {
        var i = 1;
        arr.push(str1 + "-" + str2);
        if (str2.length > 1) {
            while (i < str2.length) {
                convert((str1 + "-" + str2.substr(0, i)), str2.slice(i));
                i++;
            }
        }
    }
    return arr;
}
abc("abcde");

@gaojunle

Copy link
Copy Markdown
    //思路分析:字符串的字符间是加“-"的位置,位置数为posLen=str.length-1; 
    //添加字符的所有情况是2的posLen次幂,将这些位置转成所有二进制形式(前置有0),
    //如:0001表示有5个字符,4个位置,最后一个位置上加"-",依次处理所有情况,得到所有结果
    var str = 'abcde';
    function opStr(str) {
        var len = str.length,
                binary = allBinary(len - 1),//所有二进制形式
                bLen = binary.length;
        var strArr = str.split('');

        var tempArr = [];
        for (var j = 0; j < bLen; j++) {    //对所有二进制形式
            tempArr[j] = [];
            for (var i = 0; i < len; i++) { //字符串,的处理
                tempArr[j].push(strArr[i])  //先把第一个字符加入,然后判断第一个字符后的位置是0、1,如果是1,加上"-"
                //由于字符串长度,比位置多1,因此加上i < len - 1;判断
                if(i < len - 1 && binary[j][i] == 1) {
                    tempArr[j].push('-');
                }
            }
            tempArr[j] = tempArr[j].join('');
        }
        return tempArr;
    }
    function allBinary(len) {
        var all = [], pow = Math.pow(2, len);
        for (var i = 1; i < pow; i++) {
            var parBinary = parseInt(i, 10).toString(2),
                    pLen = parBinary.length;

            var res = (pLen < len) ? Array(len - pLen + 1).join('0') + parBinary : parBinary;
            all.push(res);
        }
        return all;
    }
    var res = opStr(str);
    console.log(res)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment