资讯专栏INFORMATION COLUMN

LeetCode 剑指 Offer 轮转数组 转旋转字符串

Brenner / 2683人阅读

摘要:请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串和数字,该函数将返回左旋转两位得到的结果。

目录

第一题:左旋转字符串

解题思路:

画图解析:

代码实现:

第二题:轮转数组

解题思路:

画图解析:

代码实现:


第一题:左旋转字符串

LeetCode 剑指 Offer 58:

描述:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

解题思路:

1.使用额外的数组,数组长度等于字符串的长度.

2.遍历,让原字符串下标为i位置的字符,放到数组中下标为 (i+k)%s.length()的位置

3.最后引用一个新字符串,让数组的内容变成字符串.

画图解析:

代码实现:

class Solution {    public String reverseLeftWords(String s, int n) {        //让l表示字符串长度        int l = s.length();        //让ret表示ch数组的下标        int ret = 0;        //定义一个数组,数组的长度和字符串长度相等        char[] ch = new char[l];        //遍历        for(int i=0;i

第二题:轮转数组

LeetCode 189:

描述:

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

解题思路:

1.定义一个额外数组arr;

2.遍历,让原数组下标为i位置的元素,放到数组中下标为 (i+k)%s.length()的位置

3.将arr数组拷贝给原数组(System.arraycopy())

画图解析:

代码实现:

class Solution {    public void rotate(int[] nums, int k) {        //定义一个额外数组 新数组长度等于原数组长度        int[] arr = new int[nums.length];        int n = nums.length;        //遍历数组        for (int i = 0; i < n; ++i) {            //让数组下标i位置放在新数组(i+l)%n的位置            arr[(i + k) % n] = nums[i];        }        //数组拷贝        System.arraycopy(arr, 0, nums, 0, nums.length);    }}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124777.html

相关文章

  • LeetCode 精选TOP面试题【51 ~ 100】

    摘要:有效三角形的个数双指针最暴力的方法应该是三重循环枚举三个数字。总结本题和三数之和很像,都是三个数加和为某一个值。所以我们可以使用归并排序来解决这个问题。注意因为归并排序需要递归,所以空间复杂度为 ...

    Clect 评论0 收藏0
  • 剑指offer】7.旋数组的最小数字

    摘要:题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组为的一个旋转,该数组的最小值为。出现这种情况的类似,此时最小数字一定在的右边。 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,...

    W4n9Hu1 评论0 收藏0

发表评论

0条评论

Brenner

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<