LeetCode–繪制直線
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在于個人學習和經驗匯總,如有什么地方侵權,請聯系本人洗掉,謝謝!
說明
面試題 05.08. 繪制直線
題目
繪制直線,有個單色螢屏存盤在一個一維陣列中,使得32個連續像素可以存放在一個 int 里,螢屏寬度為w,且w可被32整除(即一個 int 不會分布在兩行上),螢屏高度可由陣列長度及螢屏寬度推算得出,請實作一個函式,繪制從點(x1, y)到點(x2, y)的水平線,
給出陣列的長度 length,寬度 w(以位元為單位)、直線開始位置 x1(位元為單位)、直線結束位置 x2(位元為單位)、直線所在行數 y,回傳繪制過后的陣列,
示例1:
輸入:length = 1, w = 32, x1 = 30, x2 = 31, y = 0
輸出:[3]
說明:在第0行的第30位到第31為畫一條直線,螢屏表示為[0b000000000000000000000000000000011]
示例2:
輸入:length = 3, w = 96, x1 = 0, x2 = 95, y = 0
輸出:[-1, -1, -1]
Java
思路
使用位運算
代碼
class Solution {
public int[] drawLine(int length, int w, int x1, int x2, int y) {
int[] res = new int[length];
int temp = y * w / 32;
int head = x1 / 32 + temp;
int rear = x2 / 32 + temp;
for(int i = head; i <= rear; i++){
res[i] = -1;
}
res[head] = res[head] & -1 >>> x1 % 32;
res[rear] = res[rear] & Integer.MIN_VALUE >> x2 % 32;
return res;
}
}
感謝
leetcode
以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計劃
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95103.html
標籤:Java
上一篇:LeetCode–T9鍵盤
