【Leetcode -461.汉明距离 -482.密钥格式化】

简介: 【Leetcode -461.汉明距离 -482.密钥格式化】

Leetcode -461.汉明距离

题目:两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:

输入:x = 1, y = 4

输出:2

解释:

1 (0 0 0 1)

4 (0 1 0 0)

↑ ↑

上面的箭头指出了对应二进制位不同的位置。

示例 2:

输入:x = 3, y = 1

输出:1

思路是使用按位与,得到两个数二进制的低位进行比较,不相同则统计,每次比较完将两个数的二进制位向右移;

int hammingDistance(int x, int y)
    {
        int ans = 0;
        //整型有32位比特位,遍历两个数的所有比特位,不同的用ans统计
        for (int i = 0; i < 32; i++)
        {
            if ((x >> i & 1) != (y >> i & 1))
            {
                ans++;
            }
        }
        return ans;
    }

Leetcode - 482.密钥格式化

题目:给定一个许可密钥字符串 s,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。

我们想要重新格式化字符串 s,使每一组包含 k 个字符,除了第一组,它可以比 k 短,但仍然必须包含至少一个字符。

此外,两组之间必须插入破折号,并且应该将所有小写字母转换为大写字母。

返回重新格式化的许可密钥 。

示例 1:

输入:S = “5F3Z-2e-9-w”, k = 4

输出:“5F3Z-2E9W”

解释:字符串 S 被分成了两个部分,每部分 4 个字符;

注意,两个额外的破折号需要删掉。

示例 2:

输入:S = “2-5g-3-J”, k = 2

输出:“2-5G-3J”

解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。

思路是将字符串倒着取出来,每次取到k个就在后面加 ’ - ',直到遍历完字符串;然后将字符串逆置,小写字母转成大写;

void reverse(char* ch, int len)
    {
        int left = 0, right = len - 1;
        while (left < right)
        {
            char tmp = ch[left];
            ch[left++] = ch[right];
            ch[right--] = tmp;
        }
    }
    void Isuppercase(char* ch, int len)
    {
        for (int i = 0; i < len; i++)
        {
            if (ch[i] >= 'a' && ch[i] <= 'z')
            {
                ch[i] -= 32;
            }
        }
    }
    char* licenseKeyFormatting(char* s, int k)
    {
        //返回的数组
        char* ret = (char*)malloc(sizeof(char) * 100000);
        //因为前面的部分的字符可以少于给定的数量,所以需要将字符从字符串中倒着拿出来,这样最后一个就会是最短,再将数组逆置即可
        //使用tmp将字符串的每段分为tmp个字符
        //每次每段分完,即tmp等于0,重置tmp,将k - 1重置给tmp,
        //因为在这一次循环中当前字符也应该放到返回的数组中,不然出了这一次循环,就开始判断下一个字符了
        //重置完tmp后,在后面加一个'-',加完'-'之后再把当前字符放入数组
        int tmp = k, len = 0;
        for (int i = strlen(s) - 1; i >= 0; i--)
        {
            if (s[i] != '-')
            {
                if (tmp == 0)
                {
                    tmp = k - 1;
                    ret[len++] = '-';
                    ret[len++] = s[i];
                }
                else
                {
                    ret[len++] = s[i];
                    tmp--;
                }
            }
        }
        //放完在末尾放'\0'
        ret[len] = '\0';
        //逆置字符串
        reverse(ret, len);
        //将小写字母转换成大写字母
        Isuppercase(ret, len);
        return ret;
    }
目录
相关文章
|
Python
【Leetcode刷题Python】461. 汉明距离
提供了LeetCode题目461的Python编程解决方案,题目要求计算两个整数之间的汉明距离,即它们二进制表示中不同位数的个数。
167 0
【Leetcode刷题Python】461. 汉明距离
leetcode-1694:重新格式化电话号码
leetcode-1694:重新格式化电话号码
168 0
|
算法
leetcode-461:汉明距离
leetcode-461:汉明距离
132 0
|
算法 Java
算法打卡Day25_leetcode _461. 汉明距离
算法打卡Day25_leetcode _461. 汉明距离
算法打卡Day25_leetcode _461. 汉明距离
LeetCode 461. 汉明距离
LeetCode 461. 汉明距离
230 0
LeetCode 461. 汉明距离
|
Python
LeetCode 482. 密钥格式化
有一个密钥字符串 S ,只包含字母,数字以及 '-'(破折号)。其中, N 个 '-' 将字符串分成了 N+1 组。
219 0
|
算法 Java
《LeetCode刷题》—461.汉明距离
《LeetCode刷题》—461.汉明距离
223 0
《LeetCode刷题》—461.汉明距离
|
算法
【Day18】LeetCode算法刷题[1694. 重新格式化电话号码 ] [202.快乐数]
学习LeetCode算法刷题[1694. 重新格式化电话号码 ] [202.快乐数]。
282 0
【Day18】LeetCode算法刷题[1694. 重新格式化电话号码 ] [202.快乐数]
LeetCode每日一题——1694. 重新格式化电话号码
给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。 请你按下述方式重新格式化电话号码。
175 0
|
数据库
LeetCode(数据库)- 重新格式化部门表
LeetCode(数据库)- 重新格式化部门表
247 0