BinaryGap

BinaryGap داخل رقم صحيح موجب N هو أكبر عدد من الأصفار محاطين بالرقم واحد في الطرفين داخل التمثيل الثنائي للرقم N .
على سبيل المثال الرقم 9 ، التمثيل الثنائي له هو 1001 يحتوي على BinaryGap بالطول 2 . و الرقم 529 الممثل ثنائياً بـ 1000010001 يحتوي اثنين من الـ BinaryGap واحد بالطول 4 و آخر بالطول 3 . و الرقم 20 الممثل بـ 10100 يحتوي BinaryGap واحدة بالطول 1 . و الرقم 15 الممثل بـ 1111 لا يحتوي أياً من BinaryGap .

أكتب دالة :

class Solution { public int solution(int N); }

و التي تقبل رقم صحيح موجب N تعطي أكبر BinaryGap داخل التمثيل الثنائي لهذا الرقم . يجب أن تعطي الدالة النتيجة 0 لو أن الرقم N لا يحتوي BinaryGap .

على سبيل المثال:
الرقم N = 1041 إذا تم إدخاله لى الدالة يجب أن تعطي 5 ، لأن التمثيل الثنائي للرقم 1041 هو 10000010001 و أكبر طول لـ BinaryGap داخله هو 5 .

---------------- الحل

١- لكي تحصل على التمثيل الثنائي لرقم ما بالجافا:
Integer.toBinaryString(N);

٢- و باستخدام الـ regex التالي:
(?<=1)(.*?)(?=1)
يمكنك أن تحصل على كل حالات الأصفار في هذا التمثيل الثنائي و منه يمكنك حساب أكبرهم .

الحل كالتالي :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Solution {
    public static int solution(int N) {
        int max = 0;
        String x= Integer.toBinaryString(N);
        Matcher m = Pattern.compile("(?<=1)(.*?)(?=1)").matcher(x);
        while(m.find()) {
            if(m.group(1).length() > max)
                max = m.group(1).length();
        }
        return max;
    }
}

ليست هناك تعليقات:

إرسال تعليق

---- أتشرف بتعليقاتكم ----