码迷,mamicode.com
首页 > 其他好文 > 详细

Lintcode: Update Bits

时间:2016-01-06 06:48:06      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e g , M becomes a substring of N located at i and starting at j)

Have you met this question in a real interview? Yes
Example
Given N=(10000000000)2, M=(10101)2, i=2, j=6

return N=(10001010100)2

Note
In the function, the numbers N and M will given in decimal, you should also return a decimal number.

Challenge
Minimum number of operations?

Clarification
You can assume that the bits j through i have enough space to fit all of M. That is, if M=10011, you can assume that there are at least 5 bits between j and i. You would not, for example, have j=3 and i=2, because M could not fully fit between bit 3 and bit 2.

以题中例子为例,做一个滤波器在i,j之间:11110000011,来跟N按位与,再把M左移i位,按位或

 1 class Solution {
 2     /**
 3      *@param n, m: Two integer
 4      *@param i, j: Two bit positions
 5      *return: An integer
 6      */
 7     public int updateBits(int n, int m, int i, int j) {
 8         // write your code here
 9         int len = j-i+1;
10         int temp = 0;
11         for (int x=0; x<len; x++) {
12             temp |= 1<<x;
13         }
14         temp = ~(temp<<i);
15         return (n&temp) | (m<<i);
16     }
17 }

 

Lintcode: Update Bits

标签:

原文地址:http://www.cnblogs.com/EdwardLiu/p/5104285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!