FreeCodeCamp的JavaScript基本算法挑战

https://www.freecodecamp.com

2016-07-03

JavaScript还不是非常熟悉,用已经会的知识来解这些题,估计有些算法会非常笨。

1.反转字符串

str.split("").reverse().join("");

2.阶乘(阶乘0的结果需为1)

function factorialize(num) {
var n=1;
for(var i=num;i>0;i--){
n*=i;}
return n;
}

暂时想不到能不用添加临时变量的方法。

3.判断回文字符串

所谓回文,就是字符串反转后和反转前是一样的,而且忽略除字母数字外的其它字符并且忽略大小写。

因为不懂正则表达式,所以花费了很多时间,看来要好好看一下正则才行。

str.match(/[a-zA-Z0-9]/gi).join("").toLowerCase()==str.match(/[a-zA-Z0-9]/gi).reverse().join("").toLowerCase();

4.查找字符串中最长的单词

str.split(" ").sort(function(a,b){return b.length-a.length;})[0];

5.让字符串中每个单词的首字母大写,其他字母小写

str.split(" ").map(function(arg){return arg.charAt(0).toUpperCase()+arg.substr(1).toLowerCase();}).join(" ");

6.让一个二维整数数组的每个子数组只保留最大的数字

 for (var i=0;i<arr.length;i++){
arr[i]=arr[i].sort(function(a,b){return b-a;}).shift();
}

7.判断字符串尾部是否和目标字符串相同

str.substr(-target.length)==target;

8.按给定次数生成重复字符串

function repeatStringNumTimes(str, num) {
var Str="";
while (num>0){
Str+=str;
num--;
}
return Str;
}

又一题需要临时变量,后面再回来看看能如何优化。

9.缩略字符串(从字符串开始截取子字符串并加上“...”3个点号生成新字符串,新字符串长度等于指定长度)

function truncateString(str, num) {
if(str.length>num){
if(num>3){
str=str.slice(0,num-3)+"...";
}else{
str=str.slice(0,num)+"...";
}
}
return str;
}

做到这一题感觉自己的编码和算法都开始真的变糟糕了……

10.矮猴(什么鬼来的,好难)将一维数组按指定长度分割成二维数组

function chunkArrayInGroups(arr, size) {
var myarr=[];
for (var i=0;i<arr.length/size;i++){
myarr[i]=arr.slice(i*size,i*size+size);
}
return myarr;
}

感觉我这方法尽瞎扯,虽然能达到效果,但总觉得怪怪,应该轻松地使用arr返回,我却只能使用临时变量myarr返回。

11.惊悚电影(又来一个什么鬼名字)从数组指定位置截取新数组,看起来好像很难的样子。

function slasher(arr, howMany) {
arr=arr.slice(howMany);
return arr;
}

然后我试着用这么一句,然后就通过了……通过了、通过了?什么情况,不应该这么容易吧?对着起这么吓人的题目名字吗!

12.突变,一维数组有二个字符串元素,判断第一个元素是否包含第二个元素的所有字符,忽略大小写。

function mutation(arr) {
for(var i=0;i<arr[1].length;i++){
if(arr[0].toLowerCase().indexOf(arr[1].substr(i,1).toLowerCase())==-1){
return false;
}
}
return true;
}

13.删除数组中所有Flasy(假)值

arr.filter(function(val){if(val){return val;}});

14.搜查销毁

函数仅有一个参数为整数数组,有个数不固定整数参数需使用隐藏参数访问。过滤数组参数中出现的整数参数相同的数值,返回过滤后的数组。

function destroyer(arr) {

  var arg=arguments;
for(var i=1;i<arg.length;i++){
arr=arr.filter(function(value){return value!=arg[i];});
} return arr;
}

从这一题开始暴力拆解。

15.判断一个整数在一个乱序整数数组中按从小到大的顺序排列应在哪个索引位置插入

function getIndexToIns(arr, num) {
arr=arr.sort(function(a,b){return a-b;});
for(var i=0;i<arr.length;i++){
if(num>arr[i]&&num<arr[i+1]){
return i+1;
} else if(num==arr[i]){
return i;
} else if(i==arr.length-1){
return i+1;
}
}
return num;
}

完全暴力解题,无语了。

16.凯撒密码 ROT13(没听说过?)

ROT13就是将26个字母分成两段,每段13个,然后对应位置进行调换的简单加密方法。换算成字符编码就是直接加或减13再转换回字符。

function rot13(str) {
function rot13char(char){
if (char.charCodeAt()>=65&&char.charCodeAt()<=90){
return char.charCodeAt()>=78?String.fromCharCode(char.charCodeAt()-13):String.fromCharCode(char.charCodeAt()+13);
}else
return char;
}
str=str.split("").map(rot13char).join("");
return str;
}

增加一个过滤子函数单独处理字符,感觉相当啰嗦,应该有一行就能解决的方法吧?

终于熬完最后一题了,总共用了快要一天的时间。

RX学习笔记:FreeCodeCamp的JavaScript基本算法挑战的更多相关文章

  1. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  2. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  4. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

  5. HMM的学习笔记1:前向算法

    HMM的学习笔记 HMM是关于时序的概率模型.描写叙述由一个隐藏的马尔科夫链随机生成不可观測的状态随机序列,再由各个状态生成不可观測的状态随机序列,再由各个状态生成一个观測而产生观測的随机过程. HM ...

  6. jvm学习笔记一(垃圾回收算法)

    一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...

  7. RX学习笔记:在FreeCodeCamp的学习

    FreeCodeCamp https://www.freecodecamp.com 2016-07-03 前几日在Github浏览时,偶然看到一个叫FreeCodeCamp的开源项目,进去该网站之后感 ...

  8. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  9. Javascript学习笔记2.2 Javascript与DOM选项卡(滑动门)案例详解

    学习了DOM的知识,今天开始做些练习,想到了一个网页滑动门的特效,见下图: 1.通过建立索引实现 <!doctype html> <html> <head> < ...

随机推荐

  1. 有关字符串作为URL的 UTF8编码和解码的问题。

    当字符串要作为url访问的时候,我们对字符串中的中文非常头疼,这时候需就需要使用 UTF8来编码: //使用 stringByAddingPercentEscapesUsingEncoding 方法来 ...

  2. 修改hosts文件(判断是否为管理员/以管理员权限运行脚本)

    将以下命令保存为 HostsModify.ps1,然后执行即可 #该脚本用来添加hosts解析记录.脚本在执行的时候会判断当前用户是否为管理员,如果不是则弹出提示框口,要求输入相应密码 If (-NO ...

  3. 一个GCC4.6.3的奇妙问题的糊涂解决方案

    因为工作中需要OpenCV,又不想用Windows,所以我就在Linux下编译安装OpenCV了.一开始,由于我的计算机不能安装ubuntu12.04,所以我安装了ubuntu13.04,opencv ...

  4. java 十六进制数的转换

    今天晚上做了一道java基础题,题目看起来简单,但是实现起来却花了我近两个小时的时间,认真的做这道题,你会发现它特别考你的基本功.有兴趣的可以试一下哦. 题目: 请用此语言编写如下函数,采用自己的算法 ...

  5. CSS字体大小设置时的参考(转)

    from:http://blog.sina.com.cn/s/blog_51cd580b0100gg6y.html font-size 设置的绝对关键字: 以下几个绝对字体大小的设置是有效的.当然他们 ...

  6. JAVA_eclipse 保留Java文件时自动格式化代码和优化Import

    Eclipse 保存Java文件时自动格式化代码和优化Import Eclipse中format代码的快捷方式是ctrl+shift+F,如果大家想保存 java文件的时候 自动就格式化代码+消除不必 ...

  7. 从svn上down下来的版本在本机启动时各种问题

    大姨妈来的时候人比较暴躁,险些摔了我的电脑,还好疼痛及时,没有力气了. 昨天刚从svn上down下来的项目源码,一开始就各种报错. 1,pom.xml文件错误, maven仓库中添加插件就好了 2.服 ...

  8. kali linux 2.0 折腾笔记

    1. 配置SSH远程登录 root@kali:~# vi /etc/ssh/sshd_config #PermitRootLogin without-password PermitRootLogin ...

  9. jQuery实现jsonp源码分析(京东2015面试)

    // Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) { // This tra ...

  10. 关于Eclipse开发插件(三)

    视图之间实现事件监听 两个视图中的组件之间的互动,在开发插件的时候是经常碰到的问题.点击视图1列表的某项时,视图2的文本框显示相应的字符. 第一种主动式: 主动式就是在视图1的代码块中获取对视图2的对 ...