Ahri-珊

day25将分享LeetCode算法题342,344,345。

LeetCode

今天的三道题涉及到字符串,数字。

342. Power of Four

判断这个数是不是4的幂

心路历程

(这道题跟昨天那道判断这个数是不是3的幂不是一样的吗0.0,我还没相通为什么要再出一遍)

1.由于题目要求不允许使用循环,所以我们采用递归的方法

2.如果n不能被4整除,返回false

3.如果n能被4整除,将n/4作为下一次递归的参数

4.如果n等于1,返回true

5.特殊情况:不能作为被除数的0返回false

代码:

var isPowerOfThree = function(n) {
    if(n==0)
        return false;
    if(n==1)
        return true;
    if(n%3==0)
        {
            return isPowerOfThree(Math.floor(n/3));
        }
    else
        return false;
};

344. Reverse String

对字符串求逆

心路历程

1.初始化s_new用于保存逆转后的字符串

2.遍历字符串,从最后一位字符开始将字符存入s_new

代码:

var reverseString = function(s) {
    var s_new = '';
    for(let i=0;i<s.length;i++)
        {
            s_new += s[s.length-1-i];
        }
    return s_new;
};

345. Reverse Vowels of a String

对字符串中的元音字母求逆

心路历程

1.使用一个哈希数组hash1存s中的元音字符,一个哈希数组hash2存元音字母对应的下标

2.对hash2求逆就相当于对元音字符集求逆(我使用的是在存的时候一个正着存-push,一个倒着存-unshift的方法代替对hash2求逆)

3.由于字符串不能直接改变指定位置的值所以要将字符串转换成数组后更新元音字母的位置再转回字符串返回。

代码:

var reverseVowels = function(s) {
    var hash1 = [];
    var hash2 = [];
    var s_new = s.split('');
    for(let i=s.length-1;i>=0;i--)
        {
            if ('a' == s[i] || 'e' == s[i] || 'i' == s[i] || 'o' == s[i] || 'u' == s[i]
                || 'A' == s[i] || 'E' == s[i] || 'I' == s[i] || 'O' == s[i] || 'U' == s[i])
                {
                    hash1.push(s[i]);
                    hash2.unshift(i);
                }
        }
    for(let i=0;i<hash1.length;i++)
        {
                s_new[hash2[i]] = hash1[i];
        }
    return s_new.join('');
};

END