二进制求和
a,b两个相加,达到2就进位
代码如下
char * addBinary(char * a, char * b){
int len_a=strlen(a);
int len_b=strlen(b);
int max=len_a>len_b?len_a:len_b;
int carry=0;
char* ans=(char*)malloc(max+2);
memset(ans,0,max+2);
for(int i=0;i<max;i++)
{
int val1=len_a-1-i>=0?a[len_a-i-1]-'0':0;
int val2=len_b-1-i>=0?b[len_b-i-1]-'0':0;
ans[i]=(val1+val2+carry)%2+'0';
carry=(val1+val2+carry)/2;
}
if(carry==1)
{
ans[max]='1';
}
int left=0;
int right=carry==1?max:max-1;
while(left<right)
{
char temp=ans[left];
ans[left]=ans[right];
ans[right]=temp;
left++;
right--;
}
return ans;
}
memset(ans,0,max+2);这行注意要写
一开始没写,总是运行不出来
作用是把ans上每个都赋值0,防止乱码
x的平方根
int mySqrt(int x){
long long i=0;
while(i*i<=x)
{
i++;
}
return i-1;
}
要用long long 类型,数值大
爬楼梯
int climbStairs(int n){
int arr[46];
arr[0]=arr[1]=1;
for(int i=2;i<=n;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
return arr[n];
}
删除排序链表中的重复元素
struct ListNode* deleteDuplicates(struct ListNode* head){
if(!head)
{
return head;
}
struct ListNode* slow=head;
struct ListNode* fast;
while(slow->next)
{
if(slow->val!=slow->next->val)
{
slow=slow->next;
}
else
{
fast=slow->next;
slow->next=slow->next->next;
free(fast);
}
}
return head;
}