1、两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0; i<nums.size(); i++)
{
for(int j=i+1; j<nums.size(); j++)
{
if(nums[i] + nums[j] == target)
return {i,j};
}
}
return {};
}
};
2、反转一个单链表
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
struct ListNode *newHead = NULL;
struct ListNode *node;
while (head != NULL) {
//1. 对之前的链表做头删
node = head;
head = head->next;
//2. 对新链表做头插
node->next = newHead;
newHead = node;
}
return newHead;
}
};
3、合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
struct ListNode *head= new ListNode(-1);
struct ListNode *newNode = head;
while(l1 != NULL&&l2 != NULL){
if(l1->val<=l2->val){
newNode->next=l1;
l1=l1->next;
}else{
newNode->next=l2;
l2=l2->next;
}
newNode = newNode->next;
}
newNode->next = l1== NULL? l2:l1;
return head->next;
}
};
4、【LeetCode191题】编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
class Solution {
public:
int hammingWeight(uint32_t n) {
int res=0;
while(n>0)
{
res++;
n=n&(n-1);
}
return res;
}
};
5、【leetcode 1415】长度为n的开心字符串中字典序第k个的字符串(回溯)
class Solution {
public:
string s,res;
int cnt=0;
string getHappyString(int n, int k) {
dfs(n,k);
return cnt==k?res:"";
}
void dfs(int n, int k){
if(cnt==k)
return;
if(s.size()==n){
res=s;
cnt++;
return;
}
for(char q='a';q<='c';q++){
if(s.size()&&s.back()==q) continue;
s.push_back(q);
dfs(n,k);
s.pop_back();
}
}
};
网友评论