简单开胃菜——字母三角形
#include <iostream>
using namespace std;
const int N = 10010;
int main()
{
char c;
cin >> c;
if (c >= 'A' && c <= 'Z')
{
for (int i = 1; i <= c - 'A' + 1; i++)
{
for (int j = 1; j <= c-'A'+1-i; j++) cout << " ";//计算空格
for (int j = 1; j <= i; j++) cout << char('A' + j - 1);//计算左边递增规律
for (int j = i - 1; j >= 1; j--) cout << char('A' + j - 1);//计算右边递减规律
cout << "\n";
}
}
else //同样适用规律
{
for (int i = 1; i <= c - '1' + 1; i++)
{
for (int j = 1; j <= c - '1' + 1 - i; j++) cout << " ";
for (int j = 1; j <= i; j++) cout << char('1' + j - 1);
for (int j = i - 1; j >= 1; j--) cout << char('1' + j - 1);
cout << "\n";
}
}
return 0;
交换链表的节点
暴力开辟空间交换
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapNodes(struct ListNode* head, int k){
int a[100005];//开辟空间然后暴力交换
int asize=0;
struct ListNode* ret=head;
while(head)
{
a[asize++]=head->val;
head=head->next;
}
//经典交换法
int temp=a[k-1];
a[k-1]=a[asize-k];
a[asize-k]=temp;
head=ret;
asize=0;
while(head){
head->val=a[asize++];
head=head->next;
}
return ret;
}
没有重复元素组合的全排列
哈希与深度搜索的解法
class Solution {
int hash[10];
vector <int> stk;
void dfs(vector<int>& nums,vector<vector<int>>& ret,int depth ){
int i;
if(depth==nums.size()-1){
ret.push_back(stk);
return;//若是本身则返回
}
for(i=0;i<nums.size();++i){//哈希标记再深搜
if(!hash[i]){
hash[i]=1;
stk.push_back( nums[i] );
dfs(nums,ret,depth + 1 );
stk.pop_back();
hash[i]=0;
}
}
}
public:
vector<vector<int>> permute(vector<int>& nums) {
int i;
vector<vector<int>> ret;
memset(hash,0,sizeof(hash));
sort(nums.begin(),nums.end());
for(i=0;i<nums.size();++i){
hash[i]=1;
stk.push_back( nums[i] );
dfs(nums,ret, 0);
stk.pop_back();
hash[i]=0;
}
return ret;
}
};