仰望星空的人,不应该被嘲笑
编程题
第一题 FizzBuzz
实现 fizzBuzz 函数,参数 num 与返回值的关系如下: 1、如果 num 能同时被 7 和 9 整除,返回字符串 fizzbuzz 2、如果 num 能被 7 整除,返回字符串 fizz 3、如果 num 能被 9 整除,返回字符串 buzz 4、如果参数为空或者不是 Number 类型,返回 false 5、其余情况,返回参数 num
解题思路
如题意所述。
function Solution(num) {
if(num%7 == 0 && num%9 == 0){
return 'fizzbuzz';
}else if(num % 7 == 0){
return 'fizz';
}else if(num % 9 == 0){
return 'buzz';
}else if(!num || typeof(num) !== 'number'){
return false;
}
return num;
}
let num = 1;
console.log(Solution(num));
第二题 推倒多米诺骨牌
一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。
在开始时,我们同时把一些多米诺骨牌向左或向右推。
每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。
同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。
如果同时有多米诺骨牌落在一张垂直竖立的多米诺骨牌的两边,由于受力平衡, 该骨牌仍然保持不变。
就这个问题而言,我们会认为正在下降的多米诺骨牌不会对其它正在下降或已经下降的多米诺骨牌施加额外的力。
给定表示初始状态的字符串 “S” 。如果第 i 张多米诺骨牌被推向左边,则 S[i] = ‘L’;如果第 i 张多米诺骨牌被推向右边,则 S[i] = ‘R’;如果第 i 张多米诺骨牌没有被推动,则 S[i] = ‘.’。
返回表示最终状态的字符串。
解题思路
可以通过受力 以O(n)来求,第一遍通过从左向右遍历,求向右的受力,然后再从右往左求,求左边的受力,最后根据两边的受力设置对应的字符。
而对于原本是竖立的,力每轮迭代减少 1。
var pushDominoes = function(s) {
let n = s.length
let left = [];
let right = [];
let tmp = 0;
for(let i=0;i<n;i++){
if(s[i] == 'R'){
tmp = n;
}else if(s[i] == 'L'){
tmp = 0;
}else{
tmp = Math.max(0,tmp-1);
}
right[i] = tmp;
}
tmp = 0;
for(let i=n-1;i>=0;i--){
if(s[i] == 'L'){
tmp = n;
}else if(s[i] == 'R'){
tmp = 0;
}else{
tmp = Math.max(0,tmp-1);
}
left[i] = tmp;
}
// for(let i=0;i<n;i++){
// console.log(left[i],right[i]);
// }
let res = [];
for(let i=0;i<n;i++){
if(left[i] == right[i]){
res[i] = '.'
}else if(left[i] > right[i]){
res[i] = 'L'
}else{
res[i] = 'R'
}
}
return res.join('')
};
最后
文章产出不易,还望各位小伙伴们支持一波!
往期精选:
访问超逸の博客,方便小伙伴阅读玩耍~
学如逆水行舟,不进则退