一、打破驼峰
题目
Complete the solution so that the function will break up camel casing, using a space between words.
完成该解决方案,以便函数在单词之间使用空格来分解驼峰大小写
example
"camelCasing" => "camel Casing"
"identifier" => "identifier"
"" => ""
思路:
将传入的字符串转为数组,遍历数组,对比数组里的元素是否为大写字母,如果为大写,则前一个元素+=' '
代码:
function solution(string) {
var arr = string.split('')
for (var i=0;i<arr.length;i++){
if(arr[i] == arr[i].toUpperCase()){
arr[i-1] += ' '
}
}
return arr.join('')
}
console.log(solution("camelCasing"));
结果:
二、完美十字路口
题目:
小明有要约见一位朋友,但现在有十分钟空余时间,且该地有一个十字路口,每往一个方向走需要一分钟,给定小明一些方案,由‘w',' e',' n' ,'s'组成,使其最终能回到原点,并且时间刚刚好。
思路:
1.先判断给定方案是否等于10分钟,不等于就返回false,否则就继续执行
2.给两个变量:下x,y分别表示南北,东西两路,如果为北,则x++;如果为南,则x--;如果为东,则y++;如果为西,则y--;如果最后x,y都等于0,则可以回到原点
代码:
function isValidWalk(walk) {
if(walk.length != 10 ){
return false
}
var x=0
var y=0
for (var i=0; i<walk.length; i++){
switch(walk[i]){
case 'n':
x++
break
case 's':
x--
break
case 'w':
y++
break
case 'e':
y--
break
default :
return false
}
}
if(x==0 && y==0){
return true
}
else {
return false
}
}
console.log(isValidWalk(['w','e','w','e','w','e','w','e']))
结果为:
false
三、用#隐藏信息
题目
使用#隐藏信息,最后四位保留
代码:
function maskify(cc) {
var newcc = cc.split('')
var res = ''
if(newcc.length>4){
for(var i=0;i<newcc.length-4;i++){
newcc[i]='#'
res+=newcc[i]
}
for(var j=newcc.length-4;j<newcc.length;j++){
res+=newcc[j]
}
}
else{
res=cc
}
return res
}
console.log(maskify('111111'));//'##1111'
四、反转单词
题目:
将传入的字符串里的单词进行反转
例:
'double spaced words' -----'elbuod decaps sdrow'
思路:
1、先将传入的字符串使用split()方法分割,赋值给一个新变量
2、遍历新变量,将每一个元素先使用split方法转为数组,在使用reverse方法反转,然后使用join方法将这些字符连接成字符串,并将这些结果加载给res
代码:
function reverseWords(str) {
var words = str.split(" ")
var res=[]
for(var i = 0;i < words.length;i++){
res.push(words[i].split('').reverse().join(''))
}
return res.join(' ')
}
console.log(reverseWords('double spaced words'));
结果:
'elbuod decaps sdrow'
五、尤里卡数
题目:
Take a Number And Sum Its Digits Raised To The Consecutive Powers And the sum == Number¡Eureka!输入一个范围,求出这个范围里的尤里卡数。
例:
135=1^1+3^2+5^3----这是一个尤里卡数
思路:
使用循环,在给定的范围里循环,将数值转为字符串,然后遍历字符串,并计算
代码:
function sumDigPow(a, b) {
var res = []
for(var i=a;i<=b;i++){
var value = i.toString()
var sum = 0
for(var j=0;j<value.length;j++){
sum += Math.pow(value[j],j+1)
}
if(sum == i){
res.push(i)
}
}
return res
}
console.log(sumDigPow(1,100));
结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
六、字符串结尾
题目:
完成解决方案,以便在传入的第一个参数(字符串)以第二个参数(也是字符串)结尾时返回true。
例:
solution('abc', 'bc') // returns true solution('abc', 'd') // returns false
思路:
逆向遍历两个字符串,比较其元素是否相等
代码:
function solution(str, ending){
for(var i=str.length-1;i>=0;i--){
for(var j=ending.length-1;j>=0;j--){
if(ending[j] == str[i]){
return true
}
else{
return false
}
}
}
}
console.log(solution('abcde', 'cd'));
结果:
false
七、Tribonacci序列:
题目:
Tribonacci序列:序列的最后3个(而不是2个)数字相加,生成下一个;传入一个数组与一个数值,计算该Tribonacci序列,如果传入的数组值都为0,返回结果中的元素也为0;如果数值为0;则返回数组的第一个元素
例:
[ [1,1,1], 1 ]----- [1]
[ [3,2,1], 10 ]----- [3,2,1,6,9,16,31,56,103,190]
[ [0,0,0], 10 ]------ [0,0,0,0,0,0,0,0,0,0]
[ [300,200,100], 0 ]---- []
思路:
先判断特殊情况,如果不是特殊情况,则再执行以下代码:先将传入的数组插入到res中,然后利用双层循环,第一次循环指定要计算的轮数,第二层循环用于求值
代码:
function tribonacci(signature,n){
sum = 0
var res = []
for(var i=0;i<signature.length;i++){
sum += signature[i]
}
if(sum == 0){
for (var j=0;j<n;j++){
res.push(0)
}
}
else{
if(n == 1){
res.push(signature[0])
return res
}
else if(n==0){
res =[]
return res
}
res = res.concat(signature)
for(var i=0;i<n-3;i++){
for(j=0;j<res.length;j++){
sum = res[res.length-1]+res[res.length-2]+res[res.length-3]
}
res.push(sum)
}
}
return res
}
var signature=[1,1,1]
console.log(tribonacci(signature,10));
结果:
[1, 1, 1, 3, 5, 9, 17, 31, 57, 105]