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)。
代碼可以看看:迴文鏈表的評論,快慢指針找鏈表中點,秀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章