文章目录
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)。
代码可以看看:回文链表的评论,快慢指针找链表中点,秀。