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; } }
ليست هناك تعليقات:
إرسال تعليق
---- أتشرف بتعليقاتكم ----