Skip to content

Latest commit

 

History

History
421 lines (390 loc) · 8.88 KB

57.md

File metadata and controls

421 lines (390 loc) · 8.88 KB

解题思路

这题还是用正则会快一点

我的答案

function rgb2hex(sRGB) {
    if (/^rgb\([1-9]|[1-9]\d|1\d{2}|2[0-5]{2},\s*\[1-9]|[1-9]\d|1\d{2}|2[0-5]{2},\s*[1-9]|[1-9]\d|1\d{2}|2[0-5]{2}\)$/.test(sRGB)) {
        return '#' + sRGB.match(/\d{1,3}/g).map( x => parseInt(x).toString(16)).join('');
    } else {
        return sRGB;
    }
}

不通过 您的代码已保存 答案错误:您提交的程序没有通过所有的测试用例 case通过率为75.00%

还有25%,让我想想。

好像是正则写错了`rgb(0,0,0)这种情况没考虑,也不对应该说是转换成16进制不满二位的情况没考虑充分。

function rgb2hex(sRGB) {
    if (/^rgb\(\d|[1-9]\d|1\d{2}|2[0-5]{2},\s*\\d|[1-9]\d|1\d{2}|2[0-5]{2},\s*\d|[1-9]\d|1\d{2}|2[0-5]{2}\)$/.test(sRGB)) {
        return '#' + sRGB.match(/\d{1,3}/g).map(function (x) {
               if(parseInt(x) < 16) {
                   return '0' +  parseInt(x).toString(16);
               }else {
                   return parseInt(x).toString(16);
               }
        }).join('');
    } else {
        return sRGB;
    }
}

运行时间:1620ms,占用内存:85004k

这个是我的一些测试用例

console.log(rgb2hex('rgb(255, 255, 255)'));
console.log(rgb2hex('rgb(0, 0, 0)'));
console.log(rgb2hex('rgb(0, 22, 123)'));
console.log(rgb2hex('rgb(0, 123, 0)'));
console.log(rgb2hex('rgb(15, 199, 255)'));
console.log(rgb2hex('rgb(15, 199, 15)'));
console.log(rgb2hex('rgb(15, 199, 14)'));
console.log(rgb2hex('rgb(22, 124, 234)'));

我还有种更猥琐的解法,看了下也不过就255个,我通通把你列出来。

function rgb2hex(sRGB) {
    let rgbObj = {
        0: "00",
        1: "01",
        2: "02",
        3: "03",
        4: "04",
        5: "05",
        6: "06",
        7: "07",
        8: "08",
        9: "09",
        10: "0a",
        11: "0b",
        12: "0c",
        13: "0d",
        14: "0e",
        15: "0f",
        16: "10",
        17: "11",
        18: "12",
        19: "13",
        20: "14",
        21: "15",
        22: "16",
        23: "17",
        24: "18",
        25: "19",
        26: "1a",
        27: "1b",
        28: "1c",
        29: "1d",
        30: "1e",
        31: "1f",
        32: "20",
        33: "21",
        34: "22",
        35: "23",
        36: "24",
        37: "25",
        38: "26",
        39: "27",
        40: "28",
        41: "29",
        42: "2a",
        43: "2b",
        44: "2c",
        45: "2d",
        46: "2e",
        47: "2f",
        48: "30",
        49: "31",
        50: "32",
        51: "33",
        52: "34",
        53: "35",
        54: "36",
        55: "37",
        56: "38",
        57: "39",
        58: "3a",
        59: "3b",
        60: "3c",
        61: "3d",
        62: "3e",
        63: "3f",
        64: "40",
        65: "41",
        66: "42",
        67: "43",
        68: "44",
        69: "45",
        70: "46",
        71: "47",
        72: "48",
        73: "49",
        74: "4a",
        75: "4b",
        76: "4c",
        77: "4d",
        78: "4e",
        79: "4f",
        80: "50",
        81: "51",
        82: "52",
        83: "53",
        84: "54",
        85: "55",
        86: "56",
        87: "57",
        88: "58",
        89: "59",
        90: "5a",
        91: "5b",
        92: "5c",
        93: "5d",
        94: "5e",
        95: "5f",
        96: "60",
        97: "61",
        98: "62",
        99: "63",
        100: "64",
        101: "65",
        102: "66",
        103: "67",
        104: "68",
        105: "69",
        106: "6a",
        107: "6b",
        108: "6c",
        109: "6d",
        110: "6e",
        111: "6f",
        112: "70",
        113: "71",
        114: "72",
        115: "73",
        116: "74",
        117: "75",
        118: "76",
        119: "77",
        120: "78",
        121: "79",
        122: "7a",
        123: "7b",
        124: "7c",
        125: "7d",
        126: "7e",
        127: "7f",
        128: "80",
        129: "81",
        130: "82",
        131: "83",
        132: "84",
        133: "85",
        134: "86",
        135: "87",
        136: "88",
        137: "89",
        138: "8a",
        139: "8b",
        140: "8c",
        141: "8d",
        142: "8e",
        143: "8f",
        144: "90",
        145: "91",
        146: "92",
        147: "93",
        148: "94",
        149: "95",
        150: "96",
        151: "97",
        152: "98",
        153: "99",
        154: "9a",
        155: "9b",
        156: "9c",
        157: "9d",
        158: "9e",
        159: "9f",
        160: "a0",
        161: "a1",
        162: "a2",
        163: "a3",
        164: "a4",
        165: "a5",
        166: "a6",
        167: "a7",
        168: "a8",
        169: "a9",
        170: "aa",
        171: "ab",
        172: "ac",
        173: "ad",
        174: "ae",
        175: "af",
        176: "b0",
        177: "b1",
        178: "b2",
        179: "b3",
        180: "b4",
        181: "b5",
        182: "b6",
        183: "b7",
        184: "b8",
        185: "b9",
        186: "ba",
        187: "bb",
        188: "bc",
        189: "bd",
        190: "be",
        191: "bf",
        192: "c0",
        193: "c1",
        194: "c2",
        195: "c3",
        196: "c4",
        197: "c5",
        198: "c6",
        199: "c7",
        200: "c8",
        201: "c9",
        202: "ca",
        203: "cb",
        204: "cc",
        205: "cd",
        206: "ce",
        207: "cf",
        208: "d0",
        209: "d1",
        210: "d2",
        211: "d3",
        212: "d4",
        213: "d5",
        214: "d6",
        215: "d7",
        216: "d8",
        217: "d9",
        218: "da",
        219: "db",
        220: "dc",
        221: "dd",
        222: "de",
        223: "df",
        224: "e0",
        225: "e1",
        226: "e2",
        227: "e3",
        228: "e4",
        229: "e5",
        230: "e6",
        231: "e7",
        232: "e8",
        233: "e9",
        234: "ea",
        235: "eb",
        236: "ec",
        237: "ed",
        238: "ee",
        239: "ef",
        240: "f0",
        241: "f1",
        242: "f2",
        243: "f3",
        244: "f4",
        245: "f5",
        246: "f6",
        247: "f7",
        248: "f8",
        249: "f9",
        250: "fa",
        251: "fb",
        252: "fc",
        253: "fd",
        254: "fe",
        255: "ff",
    };
    if (/^rgb\(\d|[1-9]\d|1\d{2}|2[0-5]{2},\s*\\d|[1-9]\d|1\d{2}|2[0-5]{2},\s*\d|[1-9]\d|1\d{2}|2[0-5]{2}\)$/.test(sRGB)) {
        return '#' + sRGB.match(/\d{1,3}/g).map(function (x) {
            return rgbObj[x];
        }).join('');
    } else {
        return sRGB;
    }
}

运行时间:1433ms,占用内存:77880k

牛客题解

嬉皮士

function rgb2hex(sRGB) {
   return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(a, r, g, b){
       return '#' + hex(r) + hex(g) + hex(b);
   });
}
function hex(n){
    return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}

陌上 : 请问这里为什么是四个参数(a,r,g,b),分别代表什么?

嬉皮士 回复 陌上 : 通常是用的 a代表正则匹配的整个字符串, r ,g, b代表红绿蓝三个通道, 分别是正则中的三个括号匹配的字符串. 通常用的$0, $1, $2, $3, 个人习惯喜欢起好记的别名

wo们小时候

function rgb2hex(sRGB) {
    var regexp=/rgb\((\d+),\s*(\d+),\s*(\d+)\)/;
    var ret=sRGB.match(regexp);
    if(!ret){
        return sRGB;
    }else{
        var str='#';
        for(var i=1;i<=3;i++){
            var m=parseInt(ret[i]);
            if(m<=255&&m>=0){
                str+=(m<16?'0'+m.toString(16):m.toString(16));
            }else{
                return sRGB;
            }
        }
        return str;
    }
}

soulor.魂

//方式1:行数最少
 
function rgb2hex(sRGB) {
    return sRGB.replace(/^rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)$/,function($0,$1,$2,$3){
        return '#'+('0'+(+$1).toString(16)).slice(-2)+('0'+(+$2).toString(16)).slice(-2)+('0'+(+$3).toString(16)).slice(-2);
    });
}
 
//方式2:行数较少,代码较少,容易理解
 
function rgb2hex(sRGB) {
    return sRGB.replace(/^rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)$/,function($0,$1,$2,$3){
        return '#'+toHex($1)+toHex($2)+toHex($3);
    });
}
function toHex(str){
    return ('0'+(+str).toString(16)).slice(-2);
}
 
//方式3:行数较少,代码最少,容易理解?  //
function rgb2hex(sRGB){
    var result=['#'];
    if(!/rgb\(\d+(,\s*\d+){2}\)/.test(sRGB)){
        return sRGB;
    }
    sRGB.replace(/\d+/g,function($0){
        result.push(('0'+(+$0).toString(16)).slice(-2));
    });
    return result.join('');
}

codpoe

分享一个用移位来算 rgb 的方法。

function rgb2hex(sRGB) {
    return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(str, r, g, b){
        return '#' +
            ('00000' + (r << 16 | g << 8 | b).toString(16)).slice(-6);
     });
}