leetcode -- 231、234

231.2的幂

题目描述

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:

输入: 1
输出: true
解释: 20 = 1

示例 2:

输入: 16
输出: true
解释: 24 = 16

示例 3:

输入: 218
输出: false

解题方法

为0和1的时候单独判断

bool isPowerOfTwo(int n)
{
    int remainder = 0;
    if (n == 0)
        return false;
    while (n)
    {
        if (n == 1)
            return true;
        remainder = n % 2;
        if (remainder != 0)
            return false;
        n = n >> 1;
    }
    return true;
}

在这里插入图片描述

234.回文链表

题目描述

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false
示例 2:

输入: 1->2->2->1
输出: true

解题方法

方法一:数组存元素

将链表元素放在数组里面,再判断是不是回文。时间复杂度O(n)。空间复杂度O(n)


bool isPalindrome(struct ListNode* head)
{
    struct ListNode * p = head;
    if (head == NULL || head->next == NULL)
        return true;
    int arr[50000], t = 0;
    memset (arr, 0, sizeof(int) * 1024);    // 初始化为0
    while (p != NULL)
    {
        arr[t++] = p->val;
        p =p->next;
    }
    int i = 0, j = t-1;
    while (arr[i] == arr[j] && i <= j)
    {
        i ++; j --;
    }
    if (i > j)
        return true;
    return false;
}

在这里插入图片描述

方法二:拷贝链表,然后反转,判断和原来链表是否相同

这种方法时间复杂度O(n),空间复杂度O(n)。除了不需要连续空间之外感觉还没方法一好。

方法三:翻转后半部分链表,和前面比较是否一致

时间复杂度O(n),空间复杂度O(1)。
代码可以看看:回文链表的评论,快慢指针找链表中点,秀。

发布了184 篇原创文章 · 获赞 253 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/williamgavin/article/details/104553056