刷题时遇到的经典解法(实时更新)

1.威尔史密斯的儿子贾登史密斯是电影的明星,如空手道小子(2010)和地球之后(2013)。Jaden也以他通过Twitter提供的一些哲学而闻名。在Twitter上写作时,他几乎总是将每个单词都用于大写。

你的任务是将字符串转换为Jaden Smith编写的字符串。这些字符串是来自Jaden Smith的实际引用,但它们没有像他最初输入的那样大写。

(也就是说将一个句子每一个单词的开头字母大写);

例:

Not Jaden-Cased: "How can mirrors be real if our eyes aren't real"
Jaden-Cased:     "How Can Mirrors Be Real If Our Eyes Aren't Real"

解法:

String.prototype.toJadenCase = function () {//他人解法
return this.replace(/(^|\s)[a-z]/g, function(x){ return x.toUpperCase(); });//正则替换
};

 

String.prototype.toJadenCase = function () {//我的解法
var arr = this.split(" ");
for(var i=0;i<arr.length;i++){
var n = arr[i].slice(0,1);
var reg = new RegExp(`^${n}`,"ig");
n = n.toUpperCase();
arr[i] = arr[i].replace(reg,n);
}
var s = arr.join(" ");
return s;
};

 

 

2.数字根是数字中所有数字的递归和。给定n,取n的数字之和。如果该值有两位数,则以这种方式继续减少,直到产生一位数字。这仅适用于自然数。

例:

digital_root(16) => 1 + 6 => 7

digital_root(942) => 9 + 4 + 2 => 15 ... => 1 + 5 => 6

解法:

function digital_root(n) {//他人解法
return (n - 1) % 9 + 1;
}

/*function digital_root(n){//我的解法
var x = 0;
if(n>=10){
x += n%10;
n = parseInt(n/10);
}else{
return n;
}
return digital_root(x+digital_root(n));
}*/

 

3.通常当您购买某物时,系统会询问您的信用卡号,电话号码或最安全问题的答案是否仍然正确。但是,由于有人可能会看到你的肩膀,你不希望屏幕上显示。相反,我们掩盖它。

你的任务是编写一个函数maskify,它将除最后四个字符之外的所有字符都改为'#'

(也就是说隐藏部分密码)

例子

maskify("4556364607935616") == "############5616"
maskify(     "64607935616") ==      "#######5616"
maskify(               "1") ==                "1"
maskify(                "") ==                 ""

// "What was the name of your first pet?"
maskify("Skippy")                                   == "##ippy"
maskify("Nananananananananananananananana Batman!") == "####################################man!"
解法:
function maskify(cc) { return cc.replace(/.(?=....)/g, '#'); }//利用正则表达式结合断言解决
function maskify(cc) { return cc.slice(0, -4).replace(/./g, '#') + cc.slice(-4); }//利用字符串截取和正则表达式解决
function maskify(cc) {
if(cc.length<4){
return cc;
}else{
var str = `${cc.charAt(cc.length-4)}${cc.charAt(cc.length-3)}${cc.charAt(cc.length-2)}${cc.charAt(cc.length-1)}`;
var s = str.padStart(cc.length,'#');//利用新增方法头部补全解决
return s;
}
}

4.
编写一个方法,将一系列连续(递增)字母作为输入,并返回数组中缺少的字母。
您将始终获得有效的数组。它总会丢失一个字母。数组的长度始终至少为2. 数组中只包含一个字母。
例:
['a','b','c','d','f'] -> 'e'

   ['O','Q','R','S'] -> 'P'

解法:

function findMissingLetter(array)
{
var arr=[];
var n;
for(var i = 0;i<array.length;i++){
arr.push(array[i].charCodeAt());
}
for(var j = 0;j<arr.length;j++){
if(arr[j+1]-arr[j]==2){
n=arr[j]+1;
}
}
return String.fromCharCode(n);
}

 

5.皮特喜欢烤一些蛋糕。他有一些食谱和配料。不幸的是,他在数学上并不擅长。你可以帮他找一下,考虑到他的食谱,他可以烘烤多少块蛋糕?

编写一个函数cakes(),它接受配方(对象)和可用成分(也是一个对象)并返回Pete可以烘焙的最大蛋糕数(整数)。为简单起见,没有单位的数量(例如1磅面粉或200克糖只是1或200)。对象中不存在的成分可以视为0。

例子:

// must return 2
cakes({flour: 500, sugar: 200, eggs: 1}, {flour: 1200, sugar: 1200, eggs: 5, milk: 200});
// must return 0
cakes({apples: 3, flour: 300, sugar: 150, milk: 100, oil: 100}, {sugar: 500, flour: 2000, milk: 2000});

解法:
function cakes(recipe, available) {
var arr = [];
for(var i in recipe){
if(!available[i]){
return 0;
}
if(available[i]/recipe[i]>=1){
arr.push(parseInt(available[i]/recipe[i]));
}else{
return 0;
}
}
return Math.min(...arr);(es6扩展运算符了解一下
}
console.log(cakes({flour: 500, sugar: 200, eggs: 1}, {flour: 1200, sugar: 1200, eggs: 5, milk: 200}));
console.log(cakes({apples: 3, flour: 300, sugar: 150, milk: 100, oil: 100}, {sugar: 500, flour: 2000, milk: 2000}));

posted @ 2018-08-13 11:17  你风致  阅读(400)  评论(0编辑  收藏  举报