Codewars Java练习:Bit Counting

题目

Write a function that takes an (unsigned) integer as input, and returns the number of bits that are equal to one in the binary representation of that number.

Example: The binary representation of 1234 is 10011010010, so the function should return 5 in this case

题解

我使用了每次右移,统计奇偶性的解法——

标准解法中,我比较喜欢的有如下代码——

直接使用Integer的库函数

转换为字符串处理,其中用到了Java中的Lambda表达式

 

 

Codewars Java练习:Two to One

题目名称

TwoToOne

题目

Take 2 strings s1 and s2 including only letters from ato z. Return a new sorted string, the longest possible, containing distinct letters,

  • each taken only once – coming from s1 or s2.

Examples:

a = “xyaabbbccccdefww” b = “xxxxyyyyabklmopq”

longest(a, b) -> “abcdefklmopqwxy”

a = “abcdefghijklmnopqrstuvwxyz”

longest(a, a) -> “abcdefghijklmnopqrstuvwxyz”

题目大意

给定两个字符串,将其加起来,去重,排序后输出。

题解

刻意练习了一下ArrayList类似的容器的使用方式,发现这类问题通常有两个核心要点——

  • 如何将原始元素类型转化为对象形式,比如本题中如何将char数组和Character数组相互转换——
    • 事实上,这个转换在后期的Java版本中有ArrayUtils类提供转换函数
    • 而在早起的版本中,只有通过for语句逐个元素构造
  • 如何在内置数组、ArrayList之间转化
  • 如何在可重ArrayList和不可重的HashSet之间转化。

标准答案

最后欣赏一下标准答案——

代码使用了String的chars()函数,返回了一个IntStream类,这个类支持了后续的所有的过滤变换操作。

Codewars Java练习:Consecutive strings

题目

You are given an array strarr of strings and an integer k. Your task is to return the first longest string consisting of k consecutive strings taken in the array.

#Example:

longest_consec([“zone”, “abigail”, “theta”, “form”, “libe”, “zas”, “theta”, “abigail”], 2) –> “abigailtheta”

n being the length of the string array, if n = 0 or k > n or k <= 0 return “”.

题解

算是中规中矩的一道题吧