Ahri-珊

day7将分享LeetCode算法题168,169,171以及用React写的音乐播放器页面。

LeetCode

今天的三道题涉及到数组与字符串的处理。

168 .Excel Sheet Column Title

根据数字输出对应的字符串,1-26分别代表A-Z.。

心路历程

(本题可以直接将A-Z存入字符串,我用的ASCII码来查找数字对应的字母)常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。

1.方法:递归

2.出口:n<=26,可直接将数字转换成字符;

3.n>26:n/26,再将余数与除数分别编码。(注意:刚好整除的时候余数返回26,除数减一)

4.特殊情况:n=0时,应返回空字符串

代码:

var convertToTitle = function(n) {
    if(n==0)
        return '';
    if(n<=26)
        {
            return String.fromCharCode(n+64);
        }
    else
        {
            if(n%26==0)
                return convertToTitle(Math.floor(n/26)-1)+convertToTitle(26);
            else
                return convertToTitle(Math.floor(n/26))+convertToTitle(n%26);
        }
};

169. Majority Element

找出数组中出现次数大于2/n的元素

心路历程

1.求出数组中每个元素出现的次数

2.如何完成1:建立哈希表,每遍历一个元素,哈希表中该元素对应键值+1(注意:元素第一次出现时需要初始化hash[nums[i]]);

3.当有一个元素出现的次数大于n/2时,返回该元素

代码:

var majorityElement = function(nums) {
    var hash = {}
    for(let i=0;i<nums.length;i++)
        {
            if(!hash[nums[i]])
                hash[nums[i]] = 0;
            hash[nums[i]] ++;
            if(hash[nums[i]]>nums.length/2)
                return nums[i];
        }
    return '';

171. Excel Sheet Column Number

168题的逆运算。

心路历程

1..第一位字符代表26的(s.length-1)次方*字符值

2.将每一个字符代表的值加起来

代码:

var titleToNumber = function(s) {
    var num = 0;
    var temp;
    for(let i=0;i<s.length;i++)
        {
            if(i==s.length-1)
                num = num+(s[i].charCodeAt()-64);
            else
                {
                    temp = s[i].charCodeAt()-64;
                    for(let j=0;j<s.length-i-1;j++)
                        {
                            temp = temp*26;
                        }
                    num = num+temp;
                }
        }
    return num;
};

React编写的音乐播放器界面

准备用React写个音乐播放器,目前只写好了界面0.0。先放两张界面图,详细的等写好了再放。

歌曲列表界面

player_demo

歌词界面

player_lrc

END