目录
一·题目:
leetcode原题链接:. - 力扣(LeetCode)
二·详细思路汇总:
这里先剧透一下简单版思路哦:1.数组-1初始化;
2.定位找到x1,x2指向的整型;
3.根据x1,x2是否指向同一整型,完成对x1左侧,x2右侧更改操作。
三·代码解答(带注释版):
class Solution {
public:
//返回与x1所在整型的&的值
int corresx1(int x){
int cor=0;
for(int i=0;i<=31-(x%32);i++){
cor+=1<<i;
}
return cor;
}
//返回与x2所在整型的&的值
int corresx2(int x1,int x2,int start,int end){
int cor=0;
int terminate=0;
if(start==end) terminate=31-(x1%32);
else terminate=31;
for(int i=31-(x2%32);i<=terminate;i++){
cor+=1<<i;
}
return cor;
}
vector<int> drawLine(int length, int w, int x1, int x2, int y) {
vector<int> ret(length,-1);
//把x1,x2精确定位到整型处:
int flag = y * w / 32;
int head = x1 / 32 + flag;
int rear = x2 / 32 + flag;
//分别处理x1前方和x2后方:
ret[head] = ret[head]&corresx1(x1);
ret[rear] = ret[rear] &corresx2(x1,x2,head,rear);
//不合适的-1转回0:
for(int i=0;i<length;i++){
if(i<head||i>rear&&ret[i]==-1)
{
ret[i]=0;
}
}
return ret;
}
};