Leetcode 191 - количество битов 1 - простая задача - PullRequest
0 голосов
/ 01 апреля 2020

Вопрос: Напишите функцию, которая принимает целое число без знака и возвращает количество бит «1» (также известное как вес Хэмминга).

Пример ввода : 00000000000000000000000000001011.
Вывод: 3
Пояснение : входная двоичная строка 00000000000000000000000000001011 имеет три «1» бита.

Мой подход: publi c Решение класса

{

public int hammingWeight(int n)
{
    int i=0;
    String s = Integer.toString(n);
    HashMap<Character,Integer> hm = new HashMap<>();
    while(i<s.length())
    {
        if(hm.containsKey(hm.get(i)))
            hm.put(s.charAt(i),hm.get(i)+1);
        else
            hm.put(s.charAt(i),1);
        i+=1;
    }
    return hm.get('1');
}

} ​​

Мой вклад: 1011

Мой вывод: 1

Ожидаемый правильный вывод: 3

Я не понимаю, почему это Решение hashmap для подсчета количества единиц не работает. Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 01 апреля 2020

Попробуйте:

int i = 0;
HashMap<Character,Integer> hm = new HashMap<>();
while(i<s.length())
{
   if(hm.containsKey(s.charAt(i)))
       hm.put(s.charAt(i),hm.get(s.charAt(i))+1);
   else
       hm.put(s.charAt(i),1);
   i+=1;
}

// System.out.println(hm.get('1'));

for (Map.Entry entry : hm.entrySet()) { 
            System.out.println("Key: " + entry.getKey() + " Value: " + entry.getValue()); 
        }

Вывод:

enter image description here

Примечание- Необходимо учитывать следующие пункты:

  1. Заменить if(hm.containsKey(hm.get(i))) на if(hm.containsKey(s.charAt(i))), так как ключ должен указывать на символ ith индекса входной строки.
  2. Замените hm.put(s.charAt(i),hm.get(i)+1); на hm.put(s.charAt(i),hm.get(s.charAt(i))+1);, так как мы сначала получаем значение ith index из hashmap, а затем увеличиваем его.
...