LeetCode–繪制直線


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

以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM