Day1 前端

选择题1:

下列哪些是 HTML5 的新特性?
A. 语义标签 B. Canvas 绘图 C. <audio>元素 D. 增强型表单

答: ABCD

E.g:

语义标签:<footer>、<section>、<article>......

新增元素:视频音频<audio>、<video>、图形容器<Canvas>

增强表单:新元素<datalist>、<keygen>、<output>,新类型: color、date、datetime、mouth、search、tel.....

选择题2:

下面可以继承的属性有哪些?
A. font-size B. background C. color D. cursor

答:ACD

E.g:

在CSS中,每一个属性都有继承性的设置,表现为 inherited:Yes | no ,而Background是默认认不继承父元素的,表现为 background-xxxxx:initial 但可以通过设置显示来继承如:background:inherit

默认继承的CSS属性有:
所有元素可继承:visibility 和 cursor
内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
块状元素可继承:text-indent和text-align
列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
表格元素可继承:border-collapse

编程题1:

题目

给定一个十进制整数字符串,判断它是否是 4 的幂。

示例 1

输入:"16",输出:true

示例 2

输入:"101",输出:false

示例 3

输入:"70368744177664",输出:true

限定语言:C、 C++、Java、Python、JavaScript V8

思路1:

借由数学方法,第一时间想到的是,直接用Math库的对数运算,当以4为底的取值为整数输出true,当然log函数是以e为底的,通过换底得到:

因为 $$ log{{\small {\scriptsize B} } } N = \frac{log{\scriptsize e} N}{log{\scriptsize e} B} $$ 所以 $$ log{{\small {\tiny 4} } } 16 = \frac{log{\scriptsize e} 16}{log{\scriptsize e} 4} =\frac{Math.log(16)}{Math.log(4)}=2 $$ 当取值为整数(>=0)的0、1、2、3、4~~ 即为4的幂。

思路2:

从计算机角度去看,幂运算是不断乘以自身,那么不断的对自身求余,若求余结果一直为0,直到最后值为1,这样的值则是匹配值。若求余过程有非零值,则非匹配值。

思路3:

从二进制角度看,首先我们知道2的等幂是比较特殊的,所有2的幂以二进制表达的话都是最高位为1,而低位都为0 :

1 = 1
2 = 10
4 = 100
8 = 1000
16 = 10000

对比4的等幂 :

1 = 1
4 = 100
16 = 10000
64 = 1000000

可以发现2的等幂包括了4的等幂,但4的幂的二进制是

最高位在偶数位的1(4在偶数位2,16在偶数位4),

进一步的,我们可以通过判断最高位1的位置 => 判断这个数是不是4的等幂。

判断一个数只有最高位是1 (n&(n-1)) == 0
判断一个数的最高位1出现在偶数二进制位上 (n&0xAAAAAAAA) == 0

编程题2

题目

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略空格、字母的大小写。

示例

输入:"A man, a plan, a canal: Panama",输出:true

限定语言:C、 C++、Java、Python、JavaScript V8

思路:

只考虑字母和数字字符,忽略大小写空格,可以用toLocalLowerCase()将文本先处理为小写,再用replace替换取反正则,然后再取反处理后的字符串,再把两者比较。

        var str = "A man, a plan, a canal: Panama";
        var array = str.toLocaleLowerCase().replace(/[^a-z]/g,'');
        var array2 = array.split('').reverse().join('');
        alert(array === array2)

思路2:

有看见是用双指针的实现,我觉得实在有点没必要,因为这样的回文串根本没有一点实际意义。

编程题3

题目

给定一个字符串,找出该字符串中最长回文子串的长度。

示例 1

输入:"abc",输出:0

示例 2

输入:"abcbe",输出:3

示例 3

输入:"acdcecdcf",输出:7

限定语言:C、 C++、Java、Python、JavaScript V8

思路:

这题比较麻烦,可以直接暴力破解,也可以上动态规划,emm 有空再写吧