目录

1. 排列序列

2. 翻转字符串里的单词

3. 能被13又能被20整除的四位正整数的和 ※

每日一练刷题专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 排列序列

给出集合[1,2,3,...,n],其所有元素共有n!种排列。

按大小顺序列出所有排列情况,并一一标记,当n = 3时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定nk,返回第k个排列。

示例 1:

输入:n = 3, k = 3输出:"213"

示例 2:

输入:n = 4, k = 9输出:"2314"

示例 3:

输入:n = 3, k = 1输出:"123"

提示:

  • 1 <= n <= 9
  • 1 <= k <= n!

以下程序实现了这一功能,请你填补空白处的内容:

出处:

https://edu.csdn.net/practice/25240972

代码:

#include #include #include #include static char *getPermutation(int n, int k){int i;char *result = (char*)malloc(n + 1);bool *used = (bool*)malloc(n * sizeof(bool));memset(used, false, n * sizeof(bool));int total = 1;for (i = 1; i <= n; i++){total *= i;}k = k - 1;for (i = 0; i < n; i++){total /= (n - i);int gid = k / total;k %= total;int x = -1;int count = 0;while (count <= gid){x = (x + 1) % n;if (!used[x]){count++;}}used[x] = true;result[i] = x + 1 + '0';}result[n] = '\0';return result;}int main(){printf("%s\n", getPermutation(3, 3));printf("%s\n", getPermutation(4, 9));printf("%s\n", getPermutation(3, 1));return 0;}

输出:

213
2314
123


2. 翻转字符串里的单词

给你一个字符串s,逐个翻转字符串中的所有单词

单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。

请你返回一个翻转s中单词顺序并用单个空格相连的字符串。

说明:

  • 输入字符串s可以在前面、后面或者单词间包含多余的空格。
  • 翻转后单词间应当仅用一个空格分隔。
  • 翻转后的字符串中不应包含额外的空格。

示例 1:

输入:s = "the sky is blue"输出:"blue is sky the"

示例 2:

输入:s = " hello world "输出:"world hello"解释:输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括。

示例 3:

输入:s = "a goodexample"输出:"example good a"解释:如果两个单词间有多余的空格,将翻转后单词间的空格减少到只含一个。

示例 4:

输入:s = "BobLovesAlice "输出:"Alice Loves Bob"

示例 5:

输入:s = "Alice does not even like bob"输出:"bob like even not does Alice"

提示:

  • 1 <= s.length <= 10^4
  • s包含英文大小写字母、数字和空格' '
  • s至少存在一个单词

进阶:

  • 请尝试使用O(1)额外空间复杂度的原地解法。

出处:

https://edu.csdn.net/practice/25240973

代码:

#include using namespace std;class Solution{public:string reverseWords(string s){splitStr(s);return joinStr();}private:void splitStr(string s){if (s == "")return;int len = s.length();string tmp = "";for (int i = 0; i < len; i++){if (s[i] == ' ' && tmp != ""){myStack.push(tmp);tmp = "";continue;}if (s[i] == ' ')continue;tmp += s[i];}if (tmp != "")myStack.push(tmp);return;}string joinStr(){if (myStack.empty())return "";string s = "";while (!myStack.empty()){s += myStack.top();s += " ";myStack.pop();}return s.substr(0, s.length() - 1);}stack myStack;};int main(){Solution sol;string s = "the sky is blue";cout << sol.reverseWords(s) << endl;s ="hello world";cout << sol.reverseWords(s) << endl;s ="a good example";cout << sol.reverseWords(s) << endl;return 0;}

输出:

blue is sky the
world hello
example good a


3. 能被13又能被20整除的四位正整数的和

计算所有4位正整数中同时能被13和20整除的数的和, 并同时做到如下显示:
①显示这些数:
②显示这些数的个数:
③显示这些数的和。

以下程序实现了这一功能,请你填补空白处内容:

···c++
#include “stdio.h”
int main()
{
int i = 1000;
int count = 0;
int sum = 0;
printf(“所有4位正整数中同时能被13和20整除的数:\n”);
for(i = 1000;i<10000;i++)
{
if( )
{
count++;
sum = sum + i;
printf(“%d、”,i);
}
}
printf(“\n这些数一共有%d个\n”,count);
printf(“这些数的和是:%d\n”,sum);
}
“`

出处:

https://edu.csdn.net/practice/25240974

代码:

#include "stdio.h"int main(){int i = 1000;int count = 0;int sum = 0;printf("所有4位正整数中同时能被13和20整除的数:\n");for(i = 1000;i<10000;i++){if(i % 13 == 0 && i % 20 == 0){count++;sum = sum + i;printf("%d、",i);}}printf("\n这些数一共有%d个\n",count);printf("这些数的和是:%d\n",sum);}

输出:


每日一练刷题专栏

持续,努力奋斗做强刷题搬运工!

点赞,你的认可是我坚持的动力!

收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!

主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏